В ходе проработки упражнений по расчету трубы и трубопровода полезли логические баги при вызове методов расчета. Они связаны с попыткой сделать функцию расчета максимально унифицированной - чтобы всего одной функцией расчета давления можно было охватить все интересные варианты и желательно при этом не запутаться. Дилема такая - хочется проводить расчет, например для НКТ в скважине, и снизу вверх (по забойному давлению искать устьевое) и сверху вниз (по буферному искать забойное) в одной функции, а не в двух отдельных. Это можно решить специальной переменной - флагом направления. Но одного флага не достаточно - хорошо бы еще иметь возможность регулировать направление потока относительно координат. Раньше я думал обойтись без второго флага (хотя бы для простой трубы) спрятав его в угол наклона относительно горизонта. Но вылезло несколько неприятностей
- название переменной для флага направления расчета оказалось неверным (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
Функции для расчета трубы получились сложные - много настроек и различных вариантов поведения. Наверняка там есть еще баги, но надеюсь они будут исправлены в последующих версиях.
