Gás Livre
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
O QUE É?
Este modelo é o modelo de gás mais simples do conjunto de modelos "Laboratório de Gases". As partículas estão se movendo e colidindo umas com as outras sem restrições externas, como gravidade ou recipientes. Neste modelo, as partículas são modeladas como perfeitamente elásticas sem energia, exceto sua energia cinética - que é devido ao seu movimento. As colisões entre partículas são elásticas. As partículas são coloridas de acordo com sua velocidade - azul para lento, verde para médio e vermelho para alto.
Este modelo faz parte de uma série de modelos GasLab. Eles usam as mesmas regras básicas para simular o comportamento dos gases. Cada modelo integra diferentes recursos para destacar diferentes aspectos do comportamento do gás.
O princípio básico dos modelos é que as partículas de gás têm duas ações elementares: movem-se e colidem - seja com outras partículas ou com quaisquer outros objetos, como paredes.
COMO FUNCIONA
O princípio básico de todos os modelos "Laboratório de Gases" é o seguinte algorítmo
1) Uma partícula se move em linha reta sem alterar sua velocidade, a menos que colida com outra partícula ou salte na parede. 2) Duas partículas "colidem" se se encontrarem no mesmo patch (a visão do NetLogo é composta por uma grade de pequenos quadrados chamados patches). Neste modelo, duas partículas são direcionadas para que colidam na origem. 3) É escolhido um ângulo de colisão das partículas, como se fossem duas bolas sólidas que se chocam, e esse ângulo descreve a direção da linha que liga seus centros. 4) As partículas trocam momento e energia apenas ao longo desta linha, conforme a conservação de momento e energia para colisões elásticas. 5) Cada partícula recebe sua nova velocidade, direção e energia.
COMO UTILIZÁ-LO
Configurações iniciais: - NÚMERO DE PARTÍCULAS: o número de partículas de gás. - RASTRO ?: Desenha o caminho de uma partícula individual. - COLIDE ?: Liga e desliga colisões entre partículas. - VELOCIDADE-INICIAL-PARTICULA: a velocidade inicial de cada partícula - todas começam com a mesma velocidade. - MASSA DE PARTÍCULAS: a massa de cada partícula - todas têm a mesma massa.
Como na maioria dos modelos NetLogo, a primeira etapa é pressionar CONFIGURAR. Ele coloca nas condições iniciais que você definiu com os controles deslizantes. Certifique-se de esperar até que o botão SETUP pare antes de pressionar GO. O botão INICIAR executa os modelos repetidamente. Este é um botão "para sempre".
Monitores: - Monitores POR CENTO RÁPIDO, POR CENTO MÉDIO, POR CENTO LENTO: porcentagem de partículas com velocidades diferentes: rápido (vermelho), médio (verde) e lento (azul). - VELOCIDADE MÉDIA: velocidade média das partículas. - ENERGIA MÉDIA: energia cinética média das partículas.
Parcelas: - CONTAGEM DE VELOCIDADE: plota o número de partículas em cada faixa de velocidade (rápida, média ou lenta). - HISTOGRAMA DE VELOCIDADE: distribuição da velocidade de todas as partículas. A linha cinza é o valor médio e a linha preta é a média inicial. Os valores exibidos para a velocidade são dez vezes os valores reais. - HISTOGRAMA DE ENERGIA: a distribuição das energias de todas as partículas, calculada como (m * v ^ 2) / 2. A linha cinza é o valor médio e a linha preta é a média inicial.
Inicialmente, todas as partículas têm a mesma velocidade, mas direções aleatórias. Portanto, os primeiros gráficos de histograma de velocidade e energia devem mostrar apenas uma coluna cada. Conforme as partículas colidem repetidamente, elas trocam energia e partem em novas direções, e as velocidades são dispersas - algumas partículas ficam mais rápidas, outras ficam mais lentas, e o gráfico mostrará essa mudança.
QUESTÕES NOTÁVEIS
O que está acontecendo com o número de partículas de cores diferentes? Por que existem mais partículas azuis do que vermelhas?
Você pode observar as colisões e mudanças de cor conforme elas acontecem? Por exemplo, quando uma partícula vermelha atinge uma partícula verde, que cor cada uma delas se torna?
Por que a velocidade média (velocidade média) cai? Isso viola a conservação de energia?
Este gás está em um "espaço infinito" - sem limites, sem obstruções, mas ainda com um tamanho finito! Existe uma situação física como esta?
Observe a partícula cujo caminho é traçado no desenho. Observe como o caminho "envolve" o mundo. O traço se assemelha ao movimento browniano? Você consegue reconhecer quando ocorre uma colisão? Que fatores afetam a frequência das colisões? E a "angularidade" do caminho? Você poderia fazê-lo permanecer "local" ou viajar pelo mundo todo?
QUESTÕES A SE TENTAR
Coloque todas as partículas em uma parte do mundo, ou com o mesmo título - o que acontece? Isso corresponde a uma possibilidade física?
Experimente configurações diferentes, especialmente os extremos. Os histogramas são diferentes? O padrão de rastreamento muda?
Existem outras quantidades interessantes para acompanhar?
Procure ou calcule o número * real *, o tamanho, a massa e a velocidade das partículas em um gás típico. Quando você compara esses números com os do modelo, fica surpreso que o modelo funcione tão bem? Que fenômenos físicos poderiam ser observados se realmente houvesse um pequeno número de grandes partículas no espaço ao nosso redor?
Costumamos dizer que o espaço sideral é um vácuo. Isso é verdade mesmo? Quantas partículas haveria em um espaço do tamanho deste computador?
Comments and Questions
globals [ tick-delta ;; how much we advance the tick counter this time through max-tick-delta ;; the largest tick-delta is allowed to be init-avg-speed init-avg-energy ;; initial averages avg-speed avg-energy ;; current averages fast medium slow ;; current counts percent-fast percent-medium ;; percentage of the counts percent-slow ;; percentage of the counts ] breed [ particles particle ] particles-own [ speed mass energy ;; particle info last-collision ] to setup clear-all set-default-shape particles "circle" set max-tick-delta 0.1073 make-particles update-variables set init-avg-speed avg-speed set init-avg-energy avg-energy reset-ticks end to go ask particles [ move ] ask particles [ if colidir? [check-for-collision] ] ifelse (rastro?) [ ask particle 0 [ pen-down ] ] [ ask particle 0 [ pen-up ] ] tick-advance tick-delta if floor ticks > floor (ticks - tick-delta) [ update-variables update-plots ] calculate-tick-delta display end to update-variables set medium count particles with [color = green] set slow count particles with [color = blue] set fast count particles with [color = red] set percent-medium (medium / count particles) * 100 set percent-slow (slow / count particles) * 100 set percent-fast (fast / count particles) * 100 set avg-speed mean [speed] of particles set avg-energy mean [energy] of particles end to calculate-tick-delta ;; tick-delta is calculated in such way that even the fastest ;; particle will jump at most 1 patch length in a tick. As ;; particles jump (speed * tick-delta) at every tick, making ;; tick length the inverse of the speed of the fastest particle ;; (1/max speed) assures that. Having each particle advance at most ;; one patch-length is necessary for them not to jump over each other ;; without colliding. ifelse any? particles with [speed > 0] [ set tick-delta min list (1 / (ceiling max [speed] of particles)) max-tick-delta ] [ set tick-delta max-tick-delta ] end to move ;; particle procedure if patch-ahead (speed * tick-delta) != patch-here [ set last-collision nobody ] jump (speed * tick-delta) end to check-for-collision ;; particle procedure ;; Here we impose a rule that collisions only take place when there ;; are exactly two particles per patch. if count other particles-here = 1 [ ;; the following conditions are imposed on collision candidates: ;; 1. they must have a lower who number than my own, because collision ;; code is asymmetrical: it must always happen from the point of view ;; of just one particle. ;; 2. they must not be the same particle that we last collided with on ;; this patch, so that we have a chance to leave the patch after we've ;; collided with someone. let candidate one-of other particles-here with [who < [who] of myself and myself != last-collision] ;; we also only collide if one of us has non-zero speed. It's useless ;; (and incorrect, actually) for two particles with zero speed to collide. if (candidate != nobody) and (speed > 0 or [speed] of candidate > 0) [ collide-with candidate set last-collision candidate ask candidate [ set last-collision myself ] ] ] end ;; implements a collision with another particle. ;; ;; THIS IS THE HEART OF THE PARTICLE SIMULATION, AND YOU ARE STRONGLY ADVISED ;; NOT TO CHANGE IT UNLESS YOU REALLY UNDERSTAND WHAT YOU'RE DOING! ;; ;; The two particles colliding are self and other-particle, and while the ;; collision is performed from the point of view of self, both particles are ;; modified to reflect its effects. This is somewhat complicated, so I'll ;; give a general outline here: ;; 1. Do initial setup, and determine the heading between particle centers ;; (call it theta). ;; 2. Convert the representation of the velocity of each particle from ;; speed/heading to a theta-based vector whose first component is the ;; particle's speed along theta, and whose second component is the speed ;; perpendicular to theta. ;; 3. Modify the velocity vectors to reflect the effects of the collision. ;; This involves: ;; a. computing the velocity of the center of mass of the whole system ;; along direction theta ;; b. updating the along-theta components of the two velocity vectors. ;; 4. Convert from the theta-based vector representation of velocity back to ;; the usual speed/heading representation for each particle. ;; 5. Perform final cleanup and update derived quantities. to collide-with [ other-particle ] ;; particle procedure ;;; PHASE 1: initial setup ;; for convenience, grab some quantities from other-particle let mass2 [mass] of other-particle let speed2 [speed] of other-particle let heading2 [heading] of other-particle ;; since particles are modeled as zero-size points, theta isn't meaningfully ;; defined. we can assign it randomly without affecting the model's outcome. let theta (random-float 360) ;;; PHASE 2: convert velocities to theta-based vector representation ;; now convert my velocity from speed/heading representation to components ;; along theta and perpendicular to theta let v1t (speed * cos (theta - heading)) let v1l (speed * sin (theta - heading)) ;; do the same for other-particle let v2t (speed2 * cos (theta - heading2)) let v2l (speed2 * sin (theta - heading2)) ;;; PHASE 3: manipulate vectors to implement collision ;; compute the velocity of the system's center of mass along theta let vcm (((mass * v1t) + (mass2 * v2t)) / (mass + mass2) ) ;; now compute the new velocity for each particle along direction theta. ;; velocity perpendicular to theta is unaffected by a collision along theta, ;; so the next two lines actually implement the collision itself, in the ;; sense that the effects of the collision are exactly the following changes ;; in particle velocity. set v1t (2 * vcm - v1t) set v2t (2 * vcm - v2t) ;;; PHASE 4: convert back to normal speed/heading ;; now convert my velocity vector into my new speed and heading set speed sqrt ((v1t ^ 2) + (v1l ^ 2)) set energy (0.5 * mass * (speed ^ 2)) ;; if the magnitude of the velocity vector is 0, atan is undefined. but ;; speed will be 0, so heading is irrelevant anyway. therefore, in that ;; case we'll just leave it unmodified. if v1l != 0 or v1t != 0 [ set heading (theta - (atan v1l v1t)) ] ;; and do the same for other-particle ask other-particle [ set speed sqrt ((v2t ^ 2) + (v2l ^ 2)) set energy (0.5 * mass * (speed ^ 2)) if v2l != 0 or v2t != 0 [ set heading (theta - (atan v2l v2t)) ] ] ;; PHASE 5: final updates ;; now recolor, since color is based on quantities that may have changed recolor ask other-particle [ recolor ] end to recolor ;; particle procedure ifelse speed < (0.5 * 10) [ set color blue ] [ ifelse speed > (1.5 * 10) [ set color red ] [ set color green ] ] end ;;; ;;; drawing procedures ;;; ;; creates initial particles to make-particles create-particles numero-de-particulas [ setup-particle random-position recolor ] calculate-tick-delta end to setup-particle ;; particle procedure set speed velocidade-inicial-particula set mass massa-particulas set energy (0.5 * mass * (speed ^ 2)) set last-collision nobody end ;; place particle at random location inside the box. to random-position ;; particle procedure setxy ((1 + min-pxcor) + random-float ((2 * max-pxcor) - 2)) ((1 + min-pycor) + random-float ((2 * max-pycor) - 2)) end to-report last-n [n the-list] ifelse n >= length the-list [ report the-list ] [ report last-n n butfirst the-list ] end ;; histogram procedure to draw-vert-line [ xval ] plotxy xval plot-y-min plot-pen-down plotxy xval plot-y-max plot-pen-up end ; Copyright 1997 Uri Wilensky. ; See Info tab for full copyright and license.
There is only one version of this model, created over 4 years ago by Marcos Taira.
Attached files
No files
This model does not have any ancestors.
This model does not have any descendants.