电离平衡

电离平衡 preview image

1 collaborator

Default-person Ying Li (Author)

Tags

(This model has yet to be categorized with any tags)
Visible to everyone | Changeable by the author
Model was written in NetLogo 6.4.0 • Viewed 74 times • Downloaded 3 times • Run 0 times
Download the '电离平衡' modelDownload this modelEmbed this model

Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)


Comments and Questions

Please start the discussion about this model! (You'll first need to log in.)

Click to Run Model

; Li Ying created this module at Shaanxi Normal University in 2024. If you mention this model in a publication, we ask that you include the citations below.
;Ying, L. (2024). Ionization Equilibrium. School of Chemistry and Chemical Engineering, Shaanxi Normal University.
breed [mode5_h2o_t mode5_h2o]
breed [mode5_h_t  mode5_h]
breed [mode5_oh_t  mode5_oh]
breed [mode5_na_t  mode5_na]
breed [mode5_cl_t  mode5_cl]
breed [mode5_nh4_t  mode5_nh4]
breed [mode5_nh3h2o_t  mode5_nh3h2o]
breed [mode5_ac_t  mode5_ac]
breed [mode5_hac_t  mode5_hac]
breed [mode5_nacl_t  mode5_nacl]
breed [mode5_naac_t  mode5_naac]
breed [mode5_nh4cl_t  mode5_nh4cl]
breed [mode5_nh4ac_t  mode5_nh4ac]

globals[
  Init_flag
  Up_T_flag
  add_CH3COOH_flag
  add_hcl_flag
  add_NaOH_flag
  add_CH3COONa_flag
  add_nh3_flag
  add_NH4Cl_flag
  add_water_flag
  h_count
  oh_count
  ac_count
  hac_count
  nh3h2o_count
  nh4_count

  plot1
  plot2
  plot3
  plot4
  plot5
  plot6
  Up_T_figure_flag
  add_CH3COOH_figure_flag
  add_hcl_figure_flag
  add_NaOH_figure_flag
  add_CH3COONa_figure_flag
  add_nh3_figure_flag
  add_NH4Cl_figure_flag
  add_water_figure_flag
]

to setup
  clear-all
  ;设置画布颜色白色
  ask patches [
    set pcolor white
  ]

  ;;初始化海龟
  set-default-shape mode5_ac_t  "ac"
  set-default-shape mode5_h_t   "h"
  set-default-shape mode5_oh_t  "oh"
  set-default-shape mode5_hac_t "hac"
  set-default-shape mode5_naac_t "naac"
  set-default-shape mode5_na_t "na"
  set-default-shape mode5_nh3h2o_t "nh3h20"
  set-default-shape mode5_nh4_t "nh4"
  set-default-shape mode5_nh4cl_t "nh4cl"
  set-default-shape mode5_cl_t "cl"

  if (Compound  = "CH3COOH")[
    create-mode5_hac_t (20)
    [
      setxy random-xcor random-ycor
      set size 3
    ]
  ]
  if (Compound  = "NH3.H2O")[
    create-mode5_nh3h2o_t (20)
    [
      setxy random-xcor random-ycor
      set size 3
    ]
  ]

  set Init_flag 0
  set Up_T_flag 0
  set add_CH3COOH_flag 0
  set add_hcl_flag 0
  set add_NaOH_flag 0
  set add_CH3COONa_flag 0
  set add_nh3_flag 0
  set add_NH4Cl_flag 0
  set add_water_flag 0

  reset-ticks
end 

to go
  if ticks mod 300 = 0 [
    Hydrolytic_separation

    ask turtles
    [
      fd 1                                        ;; move turtles around randomly
      rt random 360
      lt random 360
    ]

    if (Compound  = "CH3COOH")[
      set h_count count mode5_h_t
      set ac_count count mode5_ac_t
      set hac_count count mode5_hac_t
      set oh_count count mode5_oh_t
    ]
    if (Compound  = "NH3.H2O")[
      set nh3h2o_count count mode5_nh3h2o_t
      set nh4_count count mode5_nh4_t
      set h_count count mode5_h_t
      set oh_count count mode5_oh_t
    ]
  ]

  tick
end 

;;解离

to Hydrolytic_separation
  if (Compound  = "CH3COOH")[
    if Init_flag = 0[
      let temp_number count mode5_hac_t
      if temp_number > 15[
        if ticks mod 3000 = 0 [
          let mode5_hac_t_molecule one-of turtles with [breed = mode5_hac_t]
          ;;将一个hac分子变成h + ac
          ask mode5_hac_t_molecule [
            set breed mode5_h_t
            set size 2
          ];;创建一个oh
          create-mode5_ac_t (1)
          [
            setxy random-xcor random-ycor
            set size 3
          ]
        ]
      ]
      if temp_number = 15[
        set Init_flag 1
      ]
    ]
  ]
  if (Compound  = "NH3.H2O") [
    if Init_flag = 0[
      let temp_number count mode5_nh3h2o_t
      if temp_number > 15[
        if ticks mod 3000 = 0 [
          let mode5_nh3h2o_t_molecule one-of turtles with [breed = mode5_nh3h2o_t]
          ;;将一个hac分子变成h + ac
          ask mode5_nh3h2o_t_molecule [
            set breed mode5_nh4_t
            set size 3
          ];;创建一个oh
          create-mode5_oh_t (1)
          [
            setxy random-xcor random-ycor
            set size 3
          ]
        ]
      ]
      if temp_number = 15[
        set Init_flag 1
      ]
    ]
  ]
end 

;;加入按键

to add
end 

;;升温按键

to Up_T
  set Up_T_figure_flag 1
  if (Compound  = "CH3COOH")[
    if Up_T_flag = 0[
      if ticks mod 3000 = 0 [
        let x 0
        let y 0
        if (count mode5_hac_t  > 10)[
          let turtle_mode5_hac_t n-of 1 mode5_hac_t
          ask turtle_mode5_hac_t [
            set x xcor
            set y ycor
            set breed mode5_h_t
            set size 2
          ]
          create-mode5_ac_t 1
          [
            setxy x y
            set size 3
          ]
        ]
        if (count mode5_hac_t  = 10)[
          set Up_T_flag 1
        ]
      ]
    ]
  ]
  if (Compound  = "NH3.H2O")[
    if Up_T_flag = 0[
      if ticks mod 3000 = 0 [
        let x 0
        let y 0
        if (count mode5_nh3h2o_t  > 10)[
          let turtle_mode5_nh3h2o_t n-of 1 mode5_nh3h2o_t
          ask turtle_mode5_nh3h2o_t [
            set x xcor
            set y ycor
            set breed mode5_oh_t
            set size 3
          ]
          create-mode5_nh4_t 1
          [
            setxy x y
            set size 3
          ]
        ]
        if (count mode5_nh3h2o_t  = 10)[
          set Up_T_flag 1
        ]
      ]
    ]
  ]
end 

;;加CH3COOH按键

to add_CH3COOH
  set add_CH3COOH_figure_flag 1
  if (Compound  = "CH3COOH")[
    if ticks mod 3000 = 0 [
      if add_CH3COOH_flag = 1[
        let turtle_xys []  ; 创建一个空列表来存储坐标对
        let turtle_mode5_hac_t n-of 2 mode5_hac_t
        ask turtle_mode5_hac_t [
          let xys list xcor ycor  ; 创建一个包含当前乌龟坐标对的列表
          set turtle_xys lput xys turtle_xys  ; 将当前乌龟的坐标对添加到列表中
          set breed mode5_h_t
          set size 2
        ]
        foreach turtle_xys [
          xy ->
          create-mode5_ac_t 1 [
            setxy (item 0 xy) (item 1 xy)  ; 根据坐标对生成乌龟
            set size 3  ; 可根据需要设置乌龟颜色
          ]
        ]
        set add_CH3COOH_flag 2
      ]
      if add_CH3COOH_flag = 0[
        create-mode5_hac_t 10
        [
          setxy random-xcor random-ycor
          set size 3
        ]
        set add_CH3COOH_flag 1
      ]
    ]
  ]
end 

;;加水按键

to add_water
  set add_water_figure_flag 1
  if (Compound  = "CH3COOH")[
    if add_water_flag = 0[
      if ticks mod 3000 = 0 [
        let x 0
        let y 0
        if (count mode5_hac_t  > 8)[
          let turtle_mode5_hac_t n-of 1 mode5_hac_t
          ask turtle_mode5_hac_t [
            set x xcor
            set y ycor
            set breed mode5_h_t
            set size 2
          ]
          create-mode5_ac_t 1
          [
            setxy x y
            set size 3
          ]
        ]
        if (count mode5_hac_t  = 8)[
          set add_water_flag 1
        ]
      ]
    ]
  ]
  if (Compound  = "NH3.H2O")[
    if add_water_flag = 0[
      if ticks mod 3000 = 0 [
        let x 0
        let y 0
        if (count mode5_nh3h2o_t  > 8)[
          let turtle_mode5_nh3h2o_t n-of 1 mode5_nh3h2o_t
          ask turtle_mode5_nh3h2o_t [
            set x xcor
            set y ycor
            set breed mode5_oh_t
            set size 3
          ]
          create-mode5_nh4_t 1
          [
            setxy x y
            set size 3
          ]
        ]
        if (count mode5_nh3h2o_t  = 8)[
          set add_water_flag 1
        ]
      ]
    ]
  ]
end 

;;加CH3COONa按键

to add_CH3COONa
  set add_CH3COONa_figure_flag 1
  if (Compound  = "CH3COOH")[
    if ticks mod 3000 = 0 [
      if add_CH3COONa_flag = 2[
        ask mode5_ac_t [
          let meeting-mode5_h_t mode5_h_t in-radius 10
          if count meeting-mode5_h_t > 0 [
            ; 在半径2的范围内相遇时,创建新的turtle
            let turtles-here-mode5_ac_t turtles with [breed = mode5_ac_t]
            let turtles-here-mode5_h_t turtles with [breed = mode5_h_t]
            let turtle_mode5_ac_t one-of turtles-here-mode5_ac_t in-radius 2
            let turtle_mode5_h_t one-of turtles-here-mode5_h_t in-radius 2
            if turtle_mode5_ac_t != nobody and turtle_mode5_h_t != nobody [
              if count mode5_ac_t > 6[
                ask turtle_mode5_ac_t [
                  set breed mode5_hac_t
                  set size 3
                ]
                ; 删除原来的mode4_h_t turtle
                ask turtle_mode5_h_t [
                  die
                ]
              ]
              if count mode5_ac_t = 6[
                set add_CH3COONa_flag 3
              ]
            ]
          ]
        ]
      ]
      if add_CH3COONa_flag = 1[
        let turtle_xys []  ; 创建一个空列表来存储坐标对
        let turtle_mode5_naac_t n-of 5 mode5_naac_t
        ask turtle_mode5_naac_t [
          let xys list xcor ycor  ; 创建一个包含当前乌龟坐标对的列表
          set turtle_xys lput xys turtle_xys  ; 将当前乌龟的坐标对添加到列表中
          set breed mode5_ac_t
          set size 3
        ]
        foreach turtle_xys [
          xy ->
          create-mode5_na_t 1 [
            setxy (item 0 xy) (item 1 xy)  ; 根据坐标对生成乌龟
            set size 3  ; 可根据需要设置乌龟颜色
          ]
        ]
        set add_CH3COONa_flag 2
      ]
      if add_CH3COONa_flag = 0 [
        create-mode5_naac_t 5
        [
          setxy random-xcor random-ycor
          set size 3
        ]
        set add_CH3COONa_flag 1
      ]
    ]
  ]
end 

;;通HCL

to add_hcl
  set add_hcl_figure_flag 1
  if (Compound  = "CH3COOH")[
    if ticks mod 3000 = 0 [
      if add_hcl_flag = 1[
        ask mode5_ac_t [
          let meeting-mode5_h_t mode5_h_t in-radius 10
          if count meeting-mode5_h_t > 0 [
            ; 在半径2的范围内相遇时,创建新的turtle
            let turtles-here-mode5_ac_t turtles with [breed = mode5_ac_t]
            let turtles-here-mode5_h_t turtles with [breed = mode5_h_t]
            let turtle_mode5_ac_t one-of turtles-here-mode5_ac_t in-radius 2
            let turtle_mode5_h_t one-of turtles-here-mode5_h_t in-radius 2
            if turtle_mode5_ac_t != nobody and turtle_mode5_h_t != nobody [
              if count mode5_ac_t > 2[
                ask turtle_mode5_ac_t [
                  set breed mode5_hac_t
                  set size 3
                ]
                ; 删除原来的mode4_h_t turtle
                ask turtle_mode5_h_t [
                  die
                ]
              ]
              if count mode5_ac_t = 2[
                set add_hcl_flag 2
              ]
            ]
          ]
        ]
      ]
      if add_hcl_flag = 0 [
        create-mode5_h_t 5
        [
          setxy random-xcor random-ycor
          set size 2
        ]
        set add_hcl_flag 1
      ]
    ]
  ]
  if (Compound  = "NH3.H2O")[
   if ticks mod 3000 = 0 [
      if add_hcl_flag = 2 [
        let turtle_xys []  ; 创建一个空列表来存储坐标对
        let turtle_mode5_nh3h2o_t n-of 8 mode5_nh3h2o_t
        ask turtle_mode5_nh3h2o_t [
          let xys list xcor ycor  ; 创建一个包含当前乌龟坐标对的列表
          set turtle_xys lput xys turtle_xys  ; 将当前乌龟的坐标对添加到列表中
          set breed mode5_oh_t
          set size 3
        ]
        foreach turtle_xys [
          xy ->
          create-mode5_nh4_t 1 [
            setxy (item 0 xy) (item 1 xy)  ; 根据坐标对生成乌龟
            set size 3  ; 可根据需要设置乌龟颜色
          ]
        ]
        set add_hcl_flag 3
      ]
      if add_hcl_flag = 1[
        let turtle_mode5_oh_t n-of 5 mode5_oh_t
        let turtle_mode5_h_t n-of 5 mode5_h_t
        ask turtle_mode5_oh_t [
          die
        ]
        ask turtle_mode5_h_t [
          die
        ]
        set add_hcl_flag 2
      ]
      if add_hcl_flag = 0 [
        create-mode5_h_t 5
        [
          setxy random-xcor random-ycor
          set size 2
        ]
        set add_hcl_flag 1
      ]
    ]
  ]
end 

;;通NH3

to add_nh3
  set add_nh3_figure_flag 1
  if (Compound  = "NH3.H2O")[
    if ticks mod 3000 = 0 [
      if add_nh3_flag = 1[
        let turtle_xys []  ; 创建一个空列表来存储坐标对
        let turtle_mode5_nh3h2o_t n-of 2 mode5_nh3h2o_t
        ask turtle_mode5_nh3h2o_t [
          let xys list xcor ycor  ; 创建一个包含当前乌龟坐标对的列表
          set turtle_xys lput xys turtle_xys  ; 将当前乌龟的坐标对添加到列表中
          set breed mode5_oh_t
          set size 3
        ]
        foreach turtle_xys [
          xy ->
          create-mode5_nh4_t 1 [
            setxy (item 0 xy) (item 1 xy)  ; 根据坐标对生成乌龟
            set size 3  ; 可根据需要设置乌龟颜色
          ]
        ]
        set add_nh3_flag 2
      ]
      if add_nh3_flag = 0[
        create-mode5_nh3h2o_t 10
        [
          setxy random-xcor random-ycor
          set size 3
        ]
        set add_nh3_flag 1
      ]
    ]
  ]
end 

;;加NaOH

to add_NaOH
  set add_NaOH_figure_flag 1
  if (Compound  = "CH3COOH")[
    if ticks mod 3000 = 0 [
      if add_NaOH_flag = 2 [
        let turtle_xys []  ; 创建一个空列表来存储坐标对
        let turtle_mode5_hac_t n-of 8 mode5_hac_t
        ask turtle_mode5_hac_t [
          let xys list xcor ycor  ; 创建一个包含当前乌龟坐标对的列表
          set turtle_xys lput xys turtle_xys  ; 将当前乌龟的坐标对添加到列表中
          set breed mode5_h_t
          set size 2
        ]
        foreach turtle_xys [
          xy ->
          create-mode5_ac_t 1 [
            setxy (item 0 xy) (item 1 xy)  ; 根据坐标对生成乌龟
            set size 3  ; 可根据需要设置乌龟颜色
          ]
        ]
        set add_NaOH_flag 3
      ]
      if add_NaOH_flag = 1[
        let turtle_mode5_oh_t n-of 5 mode5_oh_t
        let turtle_mode5_h_t n-of 5 mode5_h_t
        ask turtle_mode5_oh_t [
          die
        ]
        ask turtle_mode5_h_t [
          die
        ]
        set add_NaOH_flag 2
      ]
      if add_NaOH_flag = 0 [
        create-mode5_oh_t 5
        [
          setxy random-xcor random-ycor
          set size 3
        ]
        set add_NaOH_flag 1
        stop
      ]
    ]
  ]
  if (Compound  = "NH3.H2O")[
    if ticks mod 3000 = 0 [
      if add_NaOH_flag = 1[
        ask mode5_nh4_t [
          let meeting-mode5_oh_t mode5_oh_t in-radius 10
          if count meeting-mode5_oh_t > 0 [
            ; 在半径2的范围内相遇时,创建新的turtle
            let turtles-here-mode5_nh4_t turtles with [breed = mode5_nh4_t]
            let turtles-here-mode5_oh_t turtles with [breed = mode5_oh_t]
            let turtle_mode5_nh4_t one-of turtles-here-mode5_nh4_t in-radius 2
            let turtle_mode5_oh_t one-of turtles-here-mode5_oh_t in-radius 2
            if turtle_mode5_nh4_t != nobody and turtle_mode5_oh_t != nobody [
              if count mode5_nh4_t > 2[
                ask turtle_mode5_nh4_t [
                  set breed mode5_nh3h2o_t
                  set size 3
                ]
                ; 删除原来的mode4_h_t turtle
                ask turtle_mode5_oh_t [
                  die
                ]
              ]
              if count mode5_nh4_t = 2[
                set add_NaOH_flag 2
              ]
            ]
          ]
        ]
      ]
      if add_NaOH_flag = 0 [
        create-mode5_oh_t 5
        [
          setxy random-xcor random-ycor
          set size 3
        ]
        set add_NaOH_flag 1
      ]
    ]
  ]
end 

;;加NH4Cl

to add_NH4Cl
  set add_NH4Cl_figure_flag 1
  if (Compound  = "NH3.H2O")[
    if ticks mod 3000 = 0 [
      if add_NH4Cl_flag = 2[
        ask mode5_nh4_t [
          let meeting-mode5_oh_t mode5_oh_t in-radius 10
          if count meeting-mode5_oh_t > 0 [
            ; 在半径2的范围内相遇时,创建新的turtle
            let turtles-here-mode5_nh4_t turtles with [breed = mode5_nh4_t]
            let turtles-here-mode5_oh_t turtles with [breed = mode5_oh_t]
            let turtle_mode5_nh4_t one-of turtles-here-mode5_nh4_t in-radius 2
            let turtle_mode5_oh_t one-of turtles-here-mode5_oh_t in-radius 2
            if turtle_mode5_nh4_t != nobody and turtle_mode5_oh_t != nobody [
              if count mode5_nh4_t > 6[
                ask turtle_mode5_nh4_t [
                  set breed mode5_nh3h2o_t
                  set size 3
                ]
                ; 删除原来的mode4_h_t turtle
                ask turtle_mode5_oh_t [
                  die
                ]
              ]
              if count mode5_nh4_t = 6[
                set add_NH4Cl_flag 3
              ]
            ]
          ]
        ]
      ]
      if add_NH4Cl_flag = 1[
        let turtle_xys []  ; 创建一个空列表来存储坐标对
        let turtle_mode5_nh4cl_t n-of 5 mode5_nh4cl_t
        ask turtle_mode5_nh4cl_t [
          let xys list xcor ycor  ; 创建一个包含当前乌龟坐标对的列表
          set turtle_xys lput xys turtle_xys  ; 将当前乌龟的坐标对添加到列表中
          set breed mode5_nh4_t
          set size 3
        ]
        foreach turtle_xys [
          xy ->
          create-mode5_cl_t 1 [
            setxy (item 0 xy) (item 1 xy)  ; 根据坐标对生成乌龟
            set size 3  ; 可根据需要设置乌龟颜色
          ]
        ]
        set add_NH4Cl_flag 2
      ]
      if add_NH4Cl_flag = 0 [
        create-mode5_nh4cl_t 5
        [
          setxy random-xcor random-ycor
          set size 3
        ]
        set add_NH4Cl_flag 1
      ]
    ]
  ]
end 

There is only one version of this model, created 7 months ago by Ying Li.

Attached files

File Type Description Last updated
电离平衡.png preview Preview for '电离平衡' 7 months ago, by Ying Li Download

This model does not have any ancestors.

This model does not have any descendants.