Порядок имеет значение: netcdf и netcdff

Писала программу на Фортране 90 (под Linux), которая осуществляет расчет на основе данных считанных из NetCDF-файла. Естественно, подключила бибилиотеку netcdf и netcdff (именно в таком порядке), прописала все необходимые пути. Сборка с динамическими библиотеками прошла успешно. И тут я решила собрать программу так, чтобы при переносе на другую мою Линукс-машину не потребовалось ее пересобирать. Дописала ключ "-static"... и тут началось! Вылезло огромное количество ошибок! Не может найти функции... Мучения по определению причины такого поведениея продолжались около часа. И уже, почти отчаявшись, я, так, а почему бы и нет!, поменяла местами netcdf и netcdff. Указала при линковке сначала netcdff, а потом уже netcdf. И вдруг все собралось!

По ходу, линкер налету проверяет наличие тех или иных функций, т.е. если одна функция вызывает другую, то вторая должна быть прилинкована до первой. И это логично! Тут главное знать что на что ссылается :-)

Мысли мимоходом: моя научная семья :-)

Для меня научное сообщество, в котором я вращаюсь - это такая большая семья :-) Как и в семье, в научном сообществе бывает всякое. Мы можем не сходиться во мнениях, не всегда понимаем друг друга, но, как правило, всегда готовы к контакту, обмену мнениями и опытом. Стараемся поддерживать друг друга в каких-то жизненных ситуациях. Радуемся успехам друг друга! Эта поддержка бесценна!

Встречаются, конечно, люди, которые считают, что "есть мнение мое и неправильное", и которые порой очень резко демонстрируют свое мнение о тебе и твоей работе... Ну, что ж, недопонимания случаются везде, и это очень хороший стимул научиться владеть собой,  аргументировано отстаивать свою точку зрения и, при необходимости, продемонстрировать, что твое мнение имеет право на жизнь и с ним нельзя не считаться. Таких людей-раздражителей, конечно же, не много, просто они своими действиями вызывают такой наплыв не самых позитивных эмоций, что, если поддаться этим эмоциям, то кажется, что их ТОЛПЫ... :-)) Но на самом деле их ЕДИНИЦЫ! Скажем же СПАСИБО этим людям: именно они закаляют наш характер, учат предельно четко обозначать свою точку зрения, а иногда и ставить на место.  И этот опыт тоже бесценен.

А если в общем, я не знаю абсолютно точно, как научное сообщество относится ко мне, но я отношусь к нему совершенно определенно: это моя большая-большая научная семья! И я очень люблю эту семью. Ощущение, что я породнилась с четвертью мира, попав в это сообщество :-) Чудесно, не правда ли?:-))

Шаблон диссертации в LaTeX

Наконец-то я добралась и подготовила шаблон диссера в LaTeX!

Архив с доработаным  классом, ТеХ-шаблоном и с pdf-образцом можно найти пот тут: Disser_Template.zip

Отдельно доработанный под наши стандарты класс - вот тут: dissert_new.cls

ВНИМАНИЕ: в ТеХ-шаблоне ширина правого поля увеличена на 3 мм относительно той, которая задается в классе. Это сделано, т.к. часто в типографии после печати делают обрезку правого поля, и в этом случае лучше, что бы поле было чуть больше 10 мм, чтобы после обрезки правое поле было не меньше 10 мм (ЭТО КРИТИЧНО!) В классе ширина полей следующая: левое - 30мм (для переплета), верхнее и нижнее - 20 мм, правое - 10 мм.

Как установить/удалить приложения в MacOS

Все началось с того, что мой муж купил себе MacBook. Он был в восторге от простоты использования MacOS! Потом одному из друзей захотелось чего-нибудь эдакого новенького, и он приобрел себе MacBook. Теперь вот консультирую :-)

Первая моя "консультация" была по установке новых приложений в MacOS.

В МасOS установка приложений осуществляется немного иначе, нежели в Windows. Существует 3 варианта установки:

1) если выкачанное выглядит как *.app: *.app - это директория, но внутрь нее заходить не надо, просто цепляешь эту директорию мышкой и тащишь в Applications (Программы); и, вуаля!, программа установлена.

2) если выкачанное выглядит как *.dmg: *.dmg - это disk image (образ диска). Делаешь двойной клик на этом файле - таким образом диск монтируется, затем, как правило (если сам не отключил такую функцию), запускается авторан, который будет выглядеть, как окошко с двумя иконками с названиями: *.app (сама программа) и Applications (линк к Applications - Программам - на компе). Далее делаешь, как в 1): цепляешь *.app и тащишь ее в Applications (просто мышку с зацепленной *.app наводишь на линк Applications  и отпускаешь). Программа установлена!

3) если выкачанное выглядит как *.pkg: *.pkg - это package - инсталлятор (как и в Винде). Кликаешь по нему два раза - запускается инсталлятор, следуешь инструкциям инсталлятора. Программа установлена!

Удалять программы в MacOS очень просто: открываешь Applications (Программы) цепляешь ненужную программу мышкой, и тащишь ее в корзину. Все! Программа удалена.

Да, надо сказать, что Applications - это аналог Виндовозных Program Files.

Еще будут полезны такие ссылки: 
www.applelife.ru (русскоязычный портал), а также  www.aple.com. На последнем, если порыться, где-то есть краткий курс для переходящих с Винды на МасOS, но, правда, только на английском языке.

Проблема с нумерацией таблиц в LaTeX или особенности \parbox{}

Столкнулась недавно с такой проблемой: неправильная нумерация таблиц. Таблицы нумеруются, но номер им присваивается не порядковый в главе (типа <номер главы>.<номер таблицы в главе>), а присваивается номер параграфа, в рамках которого эта таблица располагается. Потратила полдня на выяснение причины такого странного поведения. Выяснилось, что виной всему комманда \parbox{}.
Дело в том, что таблица получалась значительно уже, чем сама страница, и мне захотелось, чтобы заголовок таблицы размещался над таблицей, не превышая ее ширину. Вставку таблицы я сделала так (тут номер таблицы неправильный):


------------------------------------------------------------------------------------------------------------
\begin{table} [htbp]
  \centering
  \parbox{15cm}{\caption{Название таблицы --- было длинное, поэтому потребовалось ограничить его по ширине}}
  \begin{tabular}{| p{3cm} || p{3cm} | p{3cm} | p{4cm}l |}
  \hline
  \hline
  Месяц   & \centering $T_{min}$, К & \centering $T_{max}$, К &\centering  $(T_{max} - T_{min})$, К & \\
  \hline
  Декабрь &\centering  253.575   &\centering  257.778    &\centering      4.203  &   \\
  Январь  &\centering  262.431   &\centering  263.214    &\centering      0.783  &   \\
  Февраль &\centering  261.184   &\centering  260.381    &\centering     $-$0.803  &   \\
  \hline
  \hline
  \end{tabular}
\label{Ts0Sib}
\end{table}
------------------------------------------------------------------------------------------------------------


Решение проблемы нумерации оказалось простым до гениальности! Нужно было просто внести \label{Ts0Sib} под скобку \parbox. Правильный вариант выглядит так:


------------------------------------------------------------------------------------------------------------
\begin{table} [htbp]
  \centering
  \parbox{15cm}{\caption{Название таблицы --- было длинное, поэтому потребовалось ограничить его по ширине}  \label{Ts0Sib}}
  \begin{tabular}{| p{3cm} || p{3cm} | p{3cm} | p{4cm}l |}
  \hline
  \hline
  Месяц   & \centering $T_{min}$, К & \centering $T_{max}$, К &\centering  $(T_{max} - T_{min})$, К & \\
  \hline
  Декабрь &\centering  253.575   &\centering  257.778    &\centering      4.203  &   \\
  Январь  &\centering  262.431   &\centering  263.214    &\centering      0.783  &   \\
  Февраль &\centering  261.184   &\centering  260.381    &\centering     $-$0.803  &   \\
  \hline
  \hline
  \end{tabular}
\end{table}
------------------------------------------------------------------------------------------------------------


Как это объяснить, я не знаю. Вероятно, что при сборке \label прицепляется именно к \caption.

Особенности монтирования диска в Линуксе

Понадобилось мне на днях прицепить к серверу на постоянное обитание новый винчестер. Чтобы этот винчестер в дальнейшем после перезагрузок, выключений и пр. подцеплялся к серверу сам автоматом, прописала в /etc/fstab строку:

/dev/sdc1 /mnt/seagate ext3 defaults 0 0

Далее монтирую винт коммандой mount /dev/sdc1
Не монтируется. Стала разбираться. Оказалось, что проблема была в переводе строки после вписанной строчки, т.е. я сделала:
1) нажала ентер после уже имеющейся последней написанной строки с монтированием еще одного устройства
2) написала свою строку для нового устройства.

А надо было:
1) Установить курсор на последнюю строку в файле (она всегдя есть и всегда пустая)
2) вписать строку для нового устройства
3) а потом уже нажать ентер, создав тем самым новую пустую строку в конце файла.

Занятно! Всегда думала, что "от перестановки мест слагаемых..."... а оказалось, что порядок действий имеет большое значение. Предположительное объяснение такое. Возможно, в конце строки изначально стоит не перевод строки. Например, если файл поправить через виндовый редактор, то он в конце воткнет crlf, а надо только cr. Вот тот lf или еще какая бяка валается в конце файла и мешает. А при нажатии ентер непосредственно в конце строки после написания этой же строки, добавяется еще один cr, и все становится хорошо. Но это всего лишь версия.

Кстати, не понятно везде ли так происходит, или только на отдельных Линуксах. У меня на сервере стоит
Mandriva Linux release 2007.0 (Official) for i586
Kernel 2.6.17-5mdv on a 4-processor i686

Эти сведения получила, заглянув в файл /etc/issue.

Шаблон автореферата кандидатской в LaTeX

Решила наконец-то хоть немного оправдать свою наукоидность, а то все фотографии, да фотографии :-)


Я сейчас готовлюсь к защите кандидатской диссертации. Будет ли наконец-то защита или не сложится - еще видно будет, но сам текст и автореферат уже написаны и почти вылизаны. А пишу все это "удовольствие" я в LaTeX. По интернету гуляет теховский класс, предназначенный для написания диссертации. Класс очень хороший, но мне пришлось внести в него пару изменений, чтобы подтянуть оформление диссера под наш российский ГОСТ. Если найду как - позже выложу в пользование обновленный класс с описанием изменений и файлом, демонстрирующим вид получающегося документа.

Ну а тут буду вести речь об автореферате. Специального класса для автореферата я не нашла, поэтому использовала класс article.cls. Для написания автореферата был создан теховский проект, состоящий из 3-х файлов. Итак, далее приводятся шаблоны моих файлов (естесственно без информационного наполнения).


Головной файл main.tex:

\documentclass[12pt,a4paper]{article} %,twoside

\usepackage{array}
\usepackage{tabularx}
\usepackage{textcomp}
\usepackage{amsmath}
\usepackage[utf8]{inputenc}
\usepackage[russian]{babel}
\usepackage{graphicx}
\usepackage{float}
\usepackage{indentfirst}

% следующий пакет может быть полезен, если надо ужать текст, чтобы сам текст не править, но чтобы места он занимал поменьше
%\usepackage{savetrees}     

% этот пакет может быть полезен для печати текста брошюрой, сама с ним не разбиралась
%\usepackage[print]{booklet}

% а при помощи этого пакета можно посмотреть макет страницы
%\usepackage{layout}

% Задаю параметры макета страницы, все поля по 2 см
\oddsidemargin=-13pt
\topmargin=-66pt %%
\headheight=12pt %%
\headsep=38pt
\textheight=732pt
\textwidth=484pt
\marginparsep=14pt
\marginparwidth=43pt
\footskip=14pt
\marginparpush=7pt %%
\hoffset=0pt %%
\voffset=0pt %%
%\paperwidth=597pt %%
%\paperheight=845pt %%

%размер табуляции (для красной строки) в начале каждого абзаца
\parindent=1.5cm

\renewcommand{\baselinestretch}{1.25}
\newfloat{scheme}{tb}{sch}

\sloppy

% Ввожу новые комманды для своих нужд
\newcommand{\COd}{$\rm{CO_2}$}
\newcommand{\CHf}{$\rm{CH_4}$}
\newcommand{\IPCC}{МГЭИК}
\newcommand{\Signifcalc}{$\rm{Significance}$}

% Подавление висячих строк
\clubpenalty=10000
\widowpenalty=10000

\author{Фамилия И.О.} % Фамилия И.О. автора

\begin{document}
% если надо посмотреть макет страницы, также должен быть откомментирован соответствующий пакет в начале
%\layout

\include{title}    % вставка титульника
\include{avt}     % вставка самого текста автореферата
\newpage
\end{document}
------------------------------------------------------------------------------------------------

Так, теперь титульник title.tex:

\fontsize{14pt}{15pt}\selectfont  % размер шрифта и расстояния между строками
\thispagestyle{empty}

\vspace{10mm}
\begin{flushright}
  \LargeНа правах рукописи
  \textit{моя подпись}
\end{flushright}

\vspace{30mm}
\begin{center}
{\Large\bfФамилия Имя Отчество}
\end{center}

\vspace{30mm}
\begin{center}
{\bf \LARGE Название диссетрационной работы
\par}

\vspace{30mm}
{\Large
Специальность 05.13.18 --- математическое моделирование,\par
численные методы и комплексы программ
}

\vspace{15mm}
\LARGEАвтореферат\par
\Largeдиссертации на соискание учёной степени\par
кандидата физико-математических наук
\end{center}

\vspace{40mm}
\begin{center}
{\LargeГород --- год}
\end{center}

\newpage
% оборотная сторона обложки

\noindent{\bfРабота выполнена} Название учреждения, где выполнялась работа
\vspace{10mm}
\begin{table} [h]
  \begin{tabular}{ll}
  \fontsize{14pt}{15pt}\selectfontНаучный руководитель: & \fontsize{14pt}{15pt}\selectfontдоктор физико-математических наук,                     \\
                        & \fontsize{14pt}{15pt}\selectfontпрофессор Фамилия Имя Отчество
\vspace{3mm} \\
  \fontsize{14pt}{15pt}\selectfontОфициальные оппоненты:& \fontsize{14pt}{15pt}\selectfontдоктор физико-математических наук,                     \\
                        & \fontsize{14pt}{15pt}\selectfontпрофессор Фамилия Имя Отчество \vspace{1mm}         \\
                        & \fontsize{14pt}{15pt}\selectfontкандидат физико-математических наук                    \\
                        & \fontsize{14pt}{15pt}\selectfontФамилия Имя Отчество \vspace{3mm}                \\
  \fontsize{14pt}{15pt}\selectfontВедущая организация:  & \fontsize{14pt}{15pt}\selectfont Название                \\
                        & \fontsize{14pt}{15pt}\selectfont ведущей                     \\
                        & \fontsize{14pt}{15pt}\selectfont организации
  \end{tabular}
\end{table}

\vspace{20mm}
\noindentЗащита состоится DD mmmmmm YYYY~г.~в~$XX^{yy}$ часов на~заседании диссертационного совета \mbox{номер_совета} при~Название учреждения, где состоится защита по~адресу:

\vspace{15mm}
\noindentС диссертацией можно ознакомиться в библиотеке Название библиотеки.

\vspace{15mm}
\noindentАвтореферат разослан DD~mmmmmm YYY года.

\vspace{15mm}
\begin{table} [h]
  \begin{tabular}{p{10cm}cr}
    \begin{tabular}{p{10cm}}
      \fontsize{14pt}{15pt}\selectfontУченый секретарь  \\
      \fontsize{14pt}{15pt}\selectfontдиссертационного совета Номер совета  \\
      \fontsize{14pt}{15pt}\selectfontпри Организация, д.ф.-м.н.               
    \end{tabular}
    & \begin{tabular}{c}
       \\    
       \includegraphics [scale=0.18] {../img/Sorokin_signature_res.eps}
    \end{tabular}
    & \begin{tabular}{r}
       \\
       \\
       \fontsize{14pt}{15pt}\selectfont Фамилия~И.О.
    \end{tabular}
  \end{tabular}
\end{table}
------------------------------------------------------------------------------------------

Теперь шаблон самого текста avt.tex:

\subsection*{\LargeОбщая характеристика работы}
\fontsize{14pt}{15pt}\selectfont
\underline{\textbf{Актуальность темы.}}

\underline{\textbf{Целью}} данной работы является ...

Для~достижения поставленной цели необходимо было решить следующие \underline{\textbf{задачи}}:
\begin{enumerate}
 \item Задача номер один;
 \item Задача номер два;
 \item Задача номер три;
% и так далее, если нужно
\end{enumerate}

\underline{\textbf{Основные положения, выносимые на~защиту:}}
\begin{enumerate}
 \item Первое положение.
 \item Второе положение.
 \item Третье положение.
% и так далее, если нужно
\end{enumerate}

\underline{\textbf{Научная новизна:}}
\begin{enumerate}
 \item Впервые ... .
 \item Впервые ... .
 \item Впервые ... .
\end{enumerate}

\underline{\textbf{Практическая значимость}} диссертационной работы определяется ...

\underline{\textbf{Достоверность}} изложенных в работе результатов обеспечивается ...

\underline{\textbf{Апробация работы.}}
Основные результаты работы докладывались~на:
Название симпозиума (Страна, город, год),
Название конференции (Страна, город, год),
% и так далее, если нужно

Диссертационная работа была выполнена при поддержке грантов ...

\underline{\textbf{Личный вклад.}} Автор принимал активное участие ...

\underline{\textbf{Публикации.}} Основные результаты по теме диссертации изложены в ХХ печатных изданиях, Х из которых изданы в журналах, рекомендованных ВАК, ХХ --- в тезисах докладов.

%\underline{\textbf{Объем и структура работы.}} Диссертация состоит из~введения, четырех глав, заключения и~приложения. Полный объем диссертации \textbf{ХХХ}~страниц текста с~\textbf{ХХ}~рисунками и~5~таблицами. Список литературы содержит \textbf{ХХX}~наименование.

%\newpage
\subsection*{\LargeСодержание работы}
Во \underline{\textbf{введении}} обосновывается актуальность исследований, проводимых в рамках данной диссертационной работы, приводится обзор научной литературы по изучаемой проблеме, формулируется цель, ставятся задачи работы, сформулированы научная новизна и практическая значимость представляемой работы.

\underline{\textbf{Первая глава}} посвящена ...

% картинку можно добавить так:
\begin{figure} [hbt]
\centering
\includegraphics [scale=1.2] {../img/co2_.eps}
\caption{Подпись к картинке.}
\label{CO2}
\end{figure}

% Формулы в строку без номера добавляются так:
$$
\lambda_{T_s} = K_x\frac{d{x}}{d{T_s}}, \qquad
\lambda_{q_s} = K_x\frac{d{x}}{d{q_s}},
$$

\underline{\textbf{Вторая глава}} посвящена исследованию

\underline{\textbf{Третья глава}} посвящена исследованию

В \underline{\textbf{четвертой главе}} приведено описание

В \underline{\textbf{заключении}} приведены основные результаты работы, которые заключаются в следующем:
\begin{enumerate}
 \item Результат номер один.
 \item Результат номер два.
 \item Результат номер три.
% и так далее, если нужно
\end{enumerate}

%\newpage
\subsection*{\LargeПубликации автора по теме диссертации}
\begin{enumerate}
 \item \emph{Фамилия~И.О., ...} Название доклада. // Тезисы докладов Название конференции --- Город-организатор: Институт-организатор, год конфы. --- С.~хх.
% И так далее...

 \item \emph{Фамилия~И.О., ...} Название статьи. // Название журнала, Год. --- Том~ХХ. --- С.~ххх--ххх.
% И так далее...
\end{enumerate}
----------------------------------------------------------------------------------------

Ну вот и все!
Когда я только начинала обдумывать макет автореферата, мне очень помог пост вот тут: http://chemistrytutor.wordpress.com/2009/10/11/avt-latex/

Весь этот проект я делала под Linux в замечательной программе Kile. Прошу заметить, что весь этот софт свободный!

Пара способов работы с GRIB в Linux

Коротко, что такое GRIB можно глянуть вот тут: http://ru.wikipedia.org/wiki/GRIB . (Вообще GRIB - это архив.)
Там же в конце есть ссылки на сайты, где есть описание внутренней структуры GRIB-архива. Особенно интересны первые 2 ссылки. Вся документация на этих ссылках на английском языке.

Так, теперь о том, как с этими "ГРИБами" работать :-))
Я нигде не наткнулась на то, как работать с GRIB под Виндой. Поэтому буду описывать как я работала с "ГРИБами" под Линуксом.

Под Линукс существует программа wgrib - это раскодировщик "ГРИБ"-файла. При помощи этого раскодировщика можно полностью раскодировать "ГРИБ"-архив полностью, можно извлечь конкретный параметр, можно посмотреть содержимое "ГРИБ"-архива, можно создать свой "ГРИБ"-архив и т.д. Далее привожу набор опций, которые позволяют проделывать эти и другие действия с "ГРИБ"-архивом при помощи wgrib:

======================= wgrib ===================================================

Portable Grib decoder for NCEP/NCAR Reanalysis etc.
   it slices, dices    v1.7.3.1 (8-5-99) Wesley Ebisuzaki
   usage: wgrib [grib file] [options]

Inventory/diagnostic-output selections
   -s/-v                   short/verbose inventory
   -V                      diagnostic output (not inventory)
   (none)                  regular inventory
 Options
   -PDS/-PDS10             print PDS in hex/decimal
   -GDS/-GDS10             print GDS in hex/decimal
   -verf                   print forecast verification time
   -ncep_opn/-ncep_rean    default T62 NCEP grib table
   -4yr                    print year using 4 digits
Decoding GRIB selection
   -d [record number|all]  decode record number
   -p [byte position]      decode record at byte position
   -i                      decode controlled by stdin (inventory list)
   (none)                  no decoding
 Options
   -text/-ieee/-grib/-bin  convert to text/ieee/grib/bin (default)
   -nh/-h                  output will have no headers/headers (default)
   -H                      output will include PDS and GDS (-bin/-ieee only)
   -append                 append to output file
   -o [file]               output file name, 'dump' is default
=================================================================================

Например, если хочется посмотреть содержимое "ГРИБ"-архива, то надо написать в коммандной строке:

wgrib -h <имя_файла_ГРИБ_архива>

После этого на экран будет выдан список всех параметров, которые хранятся в архиве.

Работа в wgrib хороша, если надо просто раскодироать "ГРИБ"-архив или посмотреть его содержимое. Если же надо проделать с извлеченными данными потом какие-нибудь операции, например, вычислить что-то на основе данных из "ГРИБа", то wgrib становится не совсем удобным. Вернее, тогда придется работу разбивать на 2 части: сначала извлечь данные, а  потом написать программу, которая по извлеченным данным будет считать.

Ну так вот, если все же нужно что-то посчитать на основе данных из "ГРИБ"-архива, то лучше использовать библиотеку w3lib. Скачать ее можно с http://www.nco.ncep.noaa.gov/pmb/codes/GRIB1/ (это для GRIB1) или с http://www.nco.ncep.noaa.gov/pmb/codes/GRIB2/ (это для GRIB2). С середины, кажется, 2007 года для gfs-файлов используется формат архива GRIB2. Работать с этой библиотекой можно уже из программы, которая пишется собственноручно. Выглядит у меня это следующим образом.

У меня установлена платформа для разработки Eclipse Ganymede  http://www.eclipse.org/platform. Это как бы аналог виндовозной Вижал-Студии. Программирую я на Фортран 90. Внутри Eclipse Ganymede прописано, что для компиляции фортрановских программ должен использоваться компилятор gfortran. Создаю в Eclipse Ganymede проект (аналогично, как и в Вижал-Студии). После этого где-то на винчестере, как обычно, появляется директория проекта. Надо скопировать в эту директорию проекта директорию, содержащую w3lib (которую надо предварительно скачать). В w3lib зашиты функции открытия "ГРИБ"-архива (типа фортрановского open), извлечение конкретного параметра, и другие функции. По всем функциям, кажется, в составе этой библиотеки идет документация. Надо подробнее почитать.