Polymerstrukturer

Polymer betyr: molekyl med mange repeterende enheter.

I denne delen ser vi hovedsaklig på molekylære aspekt ved polymerer, mens materialer av polymerer blir gjennomgått i temaet polymerer senere i emnet.

For å forstå egenskaper til polymere materialer, må vi ha en forståelse for rollen til sentrale kjemiske grupper, molekylets sammensetning og oppbygning, interaksjoner (bindinger) mellom molekyler, betydningen av molekylvekt, molekylvektsfordeling, polymeriseringsgrad og krystallinitetsgrad.

Som alltid: grundig gjennomgang av temaet finner du på Blackboard

Hvor langt er egentlig et typisk polymer-molekyl....?

image.png

Polyetylen (PE) som er illustrert i figuren over, har typisk en polymeriseringsgrad på $n$ = 100 000 eller mer.

Konturlengden til et slikt molekyl ca. 30 um (se utregning under), og lengden av molekylet når det er strukket ut i et sikksakk-mønster i et plan er ca. 25 um.

In [1]:
n = 1E5
L_kontur = n*2*0.154
print('Konturlengde = {:.2f} mikrometer for n = {:.0f}'.format(L_kontur*1E-3, n))
Konturlengde = 30.80 mikrometer for n = 100000
In [2]:
import numpy as np
L_zigzag = n*2*0.154*np.cos(np.radians(90-109.5/2))
print('Lengde av plan zigzag = {:.2f} mikrometer for n = {:.0f}'.format(L_zigzag*1E-3, n))
Lengde av plan zigzag = 25.15 mikrometer for n = 100000

Random walk

Dette er et tanke-eksperiment der vi skal bruke ideen random walk, eller tilfeldig rusletur uten mål og mening på norsk.

Noen begrensninger: Det er egentlig full frihet for rotasjon rundt en binding, men vi skal begrense utfordringen til at molekylet kun kan konfigure seg i ett plan. Det betyr at rotasjon om en binding kan kun være null eller 180 grader. Altså: det er kun to mulige (men tilfeldig) utfall for hver binding.

Koden under (selvsagt ikke pensum å forstå denne) gjør jobben:

In [3]:
import numpy as np
import matplotlib.pyplot as plt

bondangle  = 109.5   # grader, se figur
bondlength = 0.154   # nm, se figur

def roterVektor(a,v):
    # roterer en 2D vektor a grader:
    T = np.array([[np.cos(a) , -np.sin(a)],
                  [np.sin(a) ,  np.cos(a)]])
    return np.dot(T,v)

def PE_randomWalk_2D(n):
    a = 2*np.pi*np.random.random()    # tilfeldig startvinkel
    v  = roterVektor(a,[0,bondlength])
    x, y =[ 0, v[0] ], [ 0, v[1] ]    # lister som skal fylles
    adir = np.random.randint(0,2,n-1) # 0: positiv, 1: negativ
    for a in adir:
        if a == 0: 
            da =  np.radians(180 - bondangle)
        if a == 1:
            da = -np.radians(180 - bondangle)
        v=[x[-1]-x[-2], y[-1]-y[-2]] # forrige vektor (binding)
        vr = roterVektor(da ,v)      # ny vektor = forrige rotert
        x.append(x[-1]+vr[0])
        y.append(y[-1]+vr[1])
    return x, y 
In [4]:
# Eksempel: n = 100

x1,y1 = PE_randomWalk_2D(n=100)
plt.axes().set_aspect('equal')
plt.plot(x1,y1, color = 'blue')
plt.show()
In [5]:
# Eksempel: n = 1000

x1,y1 = PE_randomWalk_2D(n=1000)
plt.axes().set_aspect('equal')
plt.plot(x1,y1, color = 'blue')
plt.show()
In [6]:
# Eksempel: n = 10000

x1,y1 = PE_randomWalk_2D(n=10000)
plt.axes().set_aspect('equal')
plt.plot(x1,y1, color = 'blue')
plt.show()
In [7]:
# Eksempel: n = 10000, 3 ulike molekyl

x1,y1 = PE_randomWalk_2D(n=10000)
x2,y2 = PE_randomWalk_2D(n=10000)
x3,y3 = PE_randomWalk_2D(n=10000)
plt.axes().set_aspect('equal')
plt.plot(x1,y1, color = 'blue')
plt.plot(x2,y2, color = 'green')
plt.plot(x3,y3, color = 'red')
plt.show()

Disclaimer:This site is designed for educational purposes only. There are most likely errors, mistakes, typos, and poorly crafted statements that are not detected yet... www.ntnu.edu/employees/nils.p.vedvik

Copyright 2023, All rights reserved