Modelica - соедините соединители через некоторое расстояние

В modelica мне нужно соединить два пространства и пропустить объект, скажем, мяч, между ними через некоторое расстояние. В моем примере у меня есть два пространства, одно из которых является свободным пространством (без сил), и внезапно мы попадаем в околоземное пространство (гравитация), которое действует на мяч. Мне нужно передать мяч из первой клетки во вторую, но я не могу этого понять. Вот минимальный пример.

model Ball
  Real[2] position;
  Real[2] velocity;
  parameter Real mass=1;
equation
  der(position) = velocity;
end Ball;

connector Flange
  Real p;
  flow Ball b;
end Flange;

model FreeSpace
  Ball ball;
  parameter Real length;
  Flange f;
equation
  // need to do something, probably here, to end the first space when ball is at length
end FreeSpace;

model NearEarth
  extends FreeSpace;
  parameter Real[2] g={0,-9.8};
equation
  der(ball.velocity) = g;
end NearEarth;

model PassBall
  FreeSpace free(ball.velocity={5,0},ball.position={0,10});
  NearEarth near;
equation
  connect(free.f,near.f);
end Equation;

Возможно, я делаю что-то очень не так, но я здесь. (В реальной проблеме у меня есть электронный импульс, распространяющийся через пространства, которые наследуются от FreeSpace, но в каждом из них действуют разные силы.) Любые предложения были бы замечательными!


person Joel Berger    schedule 29.11.2010    source источник
comment
Одна вещь, которую я только что заметил в тексте выше. Вы неправильно используете Ball в определении фланца. Это не совсем правильное использование потока. Он не предназначен для дискретных потоков объектов, он предназначен для переменных, которые представляют поток сохраняемой величины (как непрерывную переменную).   -  person Michael Tiller    schedule 02.12.2010


Ответы (2)


Если я понимаю вашу цель, вы хотите иметь две разные «среды», а затем передавать объекты между этими двумя средами?

Это проблематично в Modelica. Modelica предназначена для систем со статической топологией. Под этим я подразумеваю, что все соединения присутствуют в начале моделирования, и никакие соединения не добавляются или не удаляются во время моделирования. Конечно, было бы неплохо иметь больше динамических функций, но все может быстро стать ошеломляющим, если вы добавите слишком много функций / возможностей.

Что касается вашей проблемы, вы можете создать класс FreeSpaceInteraction для описания взаимодействия между мячом и объектом FreeSpace и класс NearEarthInteraction для описания взаимодействия между мячом и объектом NearEarth. Затем у вас может быть логический сигнал для обоих, указывающий, какой из них должен быть активен в любой момент времени (в зависимости от расстояния).

Если хотите, я могу придумать пример. Очень похожий пример представлен в «Введение в физическое моделирование с помощью Modelica» (если у вас есть копия), который включает планеты и гравитационное притяжение. Одна из возникающих здесь проблем заключается в том, что вы попадаете в некоторые комбинаторные проблемы, когда у вас есть множество тел, действующих друг на друга.

Обновления:

Джоэл, Google Книги здесь твой друг. Я поискал "Modelica Gravity Tiller" и нашел эту ссылку. Надеюсь, это сработает для вас. Если нет, дайте мне знать, и я могу попробовать вставить сюда копию модели.

Рад слышать, что у UI есть моя книга ... именно там я получил докторскую степень. Хотелось бы думать, что это произошло из-за того, что я был квасцами, но я сомневаюсь в этом.

Ключ к этому в том, что у вас есть «Фиксированное пространство» - «Мяч». Я смоделировал это не так (потому что отношение имеет временное значение). В орбитальной модели я создаю «солнечную систему», которая имеет группу «планет», а затем создаю целую сеть объектов «гравитационного притяжения» типа «многие ко многим», соединяющих все со всем. В вашем случае вы можете захотеть создать подобный объект типа «силы» и связать его с мячом и каждой средой, а затем попросить его выяснить, как он может вести себя в зависимости от своего положения. По крайней мере, концептуально это один из способов сделать это.

person Michael Tiller    schedule 30.11.2010
comment
Еще раз спасибо за помощь, Майкл. Я действительно искал вашу книгу, но единственная библиотека, в которой она была, была U of I, и они не разрешили запросить ее в UIC (где я). Мне не нужно, чтобы вы писали полный ответ на мой пример. Возможно, что мне действительно нужно, так это обзор того, как кто-то будет структурировать мою систему, я могу работать с деталями оттуда. - person Joel Berger; 30.11.2010
comment
Система называется динамическим просвечивающим электронным микроскопом. Это стандартная система ПЭМ, но с электронным импульсом, генерируемым лазером. У меня есть системы дифференциальных уравнений, которые описывают динамику импульса в каждом элементе колонны микроскопа (пушка, свободное пространство, магнитная линза, резонатор радиочастотного сжатия, апертура и т. Д.). У меня есть система, смоделированная в настоящее время в Mathematica, с огромным количеством операторов if и супергауссиан, которые ограничивают пространственные области взаимодействия. - person Joel Berger; 30.11.2010
comment
Казалось, это кричит для объектно-ориентированного моделирования, и именно так я нашел Modelica. Я подумал, что могу сделать объект для каждого типа элемента и один для импульса. У меня работает модель freespace, и я уверен, что смогу заставить работать и любой элемент. Все, что мне нужно сделать, это связать их вместе, и это будет полная система. В любом случае топология будет статической, но несколько элементов будут связаны вместе. - person Joel Berger; 30.11.2010
comment
На самом деле, в худшем случае я мог бы создать каждую модель и использовать оболочку (например, Perl) для моделирования каждой системы по порядку и использовать вывод для создания ввода для следующей, но я действительно надеялся быть более элегантным, чем это. Если бы я действительно получил эту работу, это мог бы быть краеугольным камнем для нашего нового поля (DTEM / UEM) для разработки новых столбцов. - person Joel Berger; 30.11.2010
comment
Опять же, если бы вы могли порадовать меня своим руководством, как бы вы структурировали этот тип системы? Спасибо за любую помощь, которую вы можете предложить! - person Joel Berger; 30.11.2010

Я не профессор Тиллер, но у меня тоже есть опыт моделирования с Modelica.

Если я вас правильно понял, вы хотите смоделировать движение шара в двухмерной плоскости, которая состоит из двух областей: пространства с нулевым ускорением и гравитационного поля с центром вокруг планеты на плоскости.

Следующие переменные описывают движение шара как в пространстве невесомости, так и в гравитационном поле:

  • Реальная [2] скорость
  • Реальная [2] позиция
  • Реальное [2] ускорение

Тогда у вас есть постоянный параметр, который описывает, где находится Земля:

  • параметр Real [2] positionEarth

Вам также понадобится параметр, который описывает, насколько далеко распространяется гравитационное поле и насколько оно сильно:

  • параметр Real radiusGravField
  • параметр Real gravConstant

Теперь вы можете написать уравнения движения мяча в обеих областях, где ускорение, действующее на мяч, может быть вычислено с помощью различных выражений, в зависимости от того, где находится мяч в плоскости:

model grav
  import Modelica.Math.Vectors.*;
  Real[2] velocity(start={-1,-0.9});
  Real[2] position(start={5,5});
  Real[2] acceleration;
  parameter Real[2] positionEarth={0,0};
  parameter Real radiusGravField=2;
  parameter Real gravConstant=10;
equation 
  der(position) = velocity;
  der(velocity) = acceleration;
  if norm(positionEarth - position, 2) > radiusGravField then
    acceleration = {0,0};
  else
    acceleration = gravConstant/norm(positionEarth - position, 2)^2 
                    * normalize(positionEarth - position);
  end if;
end grav;

Переключение с одного домена на другой обнаруживается автоматически, и применяются правильные уравнения без необходимости указывать какие-либо переводы.

Вы можете добавить действия, которые будут происходить при дискретных событиях, например:

  when norm(positionEarth - position, 2) < radiusGravField/1000 then
    terminate("Simulation over, crashed on planet");
  end when;
person David1    schedule 20.07.2011