Skip to content

OBL inmcm refactor: разделенный интерфейс для процедур; проверка соответствия legacy RICHNUM/KH/KM оригиналу (ocfunc.f)

Ramil Ahtamyanov requested to merge feature/inmcm-interface-reorganization into main

Кратко

  • Разделил расчёт числа Ричардсона и коэффициентов 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

Merge request reports

Loading