OBL inmcm refactor: разделенный интерфейс для процедур; проверка соответствия legacy RICHNUM/KH/KM оригиналу (ocfunc.f)
Кратко
- Разделил расчёт числа Ричардсона и коэффициентов KH/KM на независимые процедуры.
- Привёл реализацию legacy-ветки (RICHNUM, KH, KM) к полной идентичности исходным процедурам из ocfunc.f (индексация, формулы, порядок вычислений).
- Упростил повторное использование: вызывающая сторона выбирает любую комбинацию “источник RIT” и “схема KH/KM”.
- CMakeLists.txt: Предотвращен запуск тестовой логики при подключении проекта как библиотеки в климат модели (SOURCE_DIR -> PROJECT_SOURCE_DIR)
- Удалены неиспользуемые файлы черновики интерфейса для legacy кода (ocevermix.f90, vertical_mixing.f90, vermix_inmom.f90
Суть изменений
- refactor(obl_inmom.f90):
- Удалён монолитный init_vermix.
- Добавлены процедуры:
-
compute_richnum_legacy(…)
— считает толькоDEN
иRIT
по legacy. -
compute_kh_legacy(…)
иcompute_km_legacy(…)
— KH/KM по legacy. -
compute_kh_pph(…)
,compute_km_pph(…)
— KH/KM по PPH. -
compute_kh_pph_dyn(…)
,compute_km_pph_dyn(…)
— KH/KM по PPH-DYN (локально считают neutral MLD и u_dynH).
- В compute_richnum_legacy:
- Массивы
s2
иn2
теперь той же вертикальной размерности, чтоrit
(NZ), без «NZ−1». - Вычисление
RIT
на всём диапазоне, после — корректировка верхнего уровня черезlegacy_rit_top
.
- Массивы
- fix(obl_legacy.f90), полное соответствие ocfunc.f, проведён построчный аудит формул/индексации
- CMakeLists.txt: включение только при сборке как top-level (через PROJECT_SOURCE_DIR), удалены дублирующиеся include/if, путь к CMakePresets.json также переведён на PROJECT_SOURCE_DIR. Без этого изменения при подключении к климат модели пыталась включаться логика Ctests и сборка проекта ломалась
Совместимость
- Старый init_vermix больше не используется. Вызывающей стороне нужно:
- Считать/получить DEN и RIT (при необходимости) вызовом compute_richnum_legacy(…).
- Затем вызвать нужную пару compute_{kh,km}_{legacy|pph|pph_dyn}(…).
- Разделение повышает гибкость: можно брать Ri из базового кода, а KH/KM — из OBL (и наоборот).
Edited by Ramil Ahtamyanov