В ходе
проработки упражнений по расчету трубы и трубопровода полезли логические баги
при вызове методов расчета. Они связаны с попыткой сделать функцию расчета
максимально унифицированной - чтобы всего одной функцией расчета давления можно
было охватить все интересные варианты и желательно при этом не запутаться.
Дилема такая - хочется проводить расчет, например для НКТ в скважине, и снизу
вверх (по забойному давлению искать устьевое)
и сверху вниз (по буферному искать забойное) в одной функции, а не в двух отдельных. Это можно решить
специальной переменной - флагом
направления. Но одного флага не достаточно - хорошо бы еще иметь возможность регулировать направление потока относительно координат. Раньше я думал обойтись без второго флага (хотя бы для простой трубы) спрятав его в угол наклона относительно горизонта. Но вылезло несколько неприятностей
- название переменной для флага
направления расчета оказалось неверным (calc_along_flow
вместо calc_along_coord, что было бы логичнее),
- при расчете нагнетания воды в скважину
параметры оказались перепутаны (но это не точно),
- при расчете трубопровода
(сегментированной трубы) использована другая логика с двумя флагами.
В итого я
сам быстро запутался где что надо задавать, когда попытался использовать эти
функции после некоторого перерыва.
Это
побудило меня внести изменения в параметры функций расчета трубы. Заодно, если
уж что то менять можно внести и другие новшества, которые я откладывал не желая менять сигнатуру вызова. Одна из старых проблем
связана с количеством переменных, которые можно использовать в пользовательских
функциях. Точнее даже не с количеством переменных, а общей длинной названий
всех переменных - если она окажется слишком большой, то в интерфейсе excel перестанут отображаться подсказки. Это
приводит к тому, что для сложных функций (скважины) приходится отказываться от
некоторых переменных. И здесь я вместо двух переменных для калибровки оставил одну, но в которую можно передавать несколько значений. Другая проблема связана с тем, что некоторые параметры расчета добавлялись в ходе доработки и оказались оторваны от себе подобных. При добавлении новых параметров лучше их делать опциональными и добавлять в конец - тогда не разрушатся старые вызовы.
Исходя
из этого изменения такие:
- Для трубы и
трубопровода (многосегментной трубы) вводится единый механизм задания
режима расчета. Используется одна переменная calc_flow_direction,
которая может принимать 4 значения
' calc_flow_direction - направление расчета и потока
' относительно координат
' если = 11 расчет и поток по координате
' если = 10 расчет по, поток против координат
' если = 00 расчет и поток против координате
' если = 01 расчет против, поток по координате
- Калибровка задается одним параметром c_calibr, которая может принимать одно или два значения, числом, массивом или объектом range. Если будет передано одно число - это будет калибровка по гравитационной составляющей, если два то трение будет также учитываться.
- Последовательность параметров изменена. Предпринята попытка сгруппировать параметры по логическим группам. При этом некоторые параметры, которые ранее были опциональны -теперь обязательны, например диаметры.
- Для трубопровода (MF_p_pipeline) отлажена схема, когда глубины, диаметры и температуру можно задавать различными методами - числом, массивом или объектом range
Функции для расчета трубы получились сложные - много настроек и различных вариантов поведения. Наверняка там есть еще баги, но надеюсь они будут исправлены в последующих версиях.