Block Copolymer Thin Film Self-ordering


Data file for initial BCP chain (4 layers) and substrate data.BCP_mass


Corresponding input file for replicating and generating initial "spincast" state:in.BCP_initialconditions

This should produce a data file for initial spin-cast structure: data.spincast_BCP


Input for taking spincast data file and running subsequent runs changing parameters: in.BCP_run

Test case: Gamma=0.2,


### ericnhahn@gmail.com ###

### BCP intial conditions ###

### Version 0.1 - 03/09/2022###


### in.BCP_initialconditions ###


variable name string BCP_mass_prod_040319_T300K


# Initialization

units metal

boundary p p f #load with fixed z boundary and then it is switched to shrink wrap later

atom_style molecular #allows for bonds and angles in data file

log log.${name}.txt

read_data data.BCP_mass

change_box all x scale 0.8 y scale 0.8 remap #use this to change the initial packing density of the system

#write_data data.BCP_example can use this to rewrite out a data file

replicate 28 56 1 #1:2 scale for x:y to make it ~ a cube

neigh_modify every 1 delay 1


# details from the paper for reference

# 52800 polymer beads and 3960 substrate

# 45.7 nm 36 nm 51 nm ----- dimensions

# bond distance 1 nm ----> 10 A

# σsubstrate (nm) = 0.11 ---> 1.1 A


# potential information

bond_style harmonic

bond_coeff 1 0.128 10

bond_coeff 2 .06 10 #this number was made up to hold together chains as per supplementary materials

angle_style harmonic

angle_coeff 1 0 180 #0 for blockCP should be zero energy, but angles will still be tracked by the system


variable epsiliona equal 1/1000

variable sigmaa equal 8.4

variable epsilionb equal 1/1000

variable sigmab equal 8.4

variable epsilionsub equal 1/1000

variable sigmasub equal 8.4

variable epsilionsa equal 32/1000

variable sigmasa equal ${sigmasub}

variable epsilionsb equal 32/1000

variable sigmasb equal ${sigmasub}

variable epsilionmixed equal ${epsiliona}*0.9

variable sigmamixed equal ${sigmaa}

variable cutoff equal 3*${sigmaa}

variable cutoffsub equal 3*${sigmasub}

# cutoff = 3σ


special_bonds lj 0.0 1 1 #this makes it such that atoms not directly bonded will be controlled by the lj/cut potential.


pair_style lj/cut ${cutoff}

pair_coeff 1 1 ${epsiliona} ${sigmaa} ${cutoff}

pair_coeff 2 2 ${epsilionb} ${sigmab} ${cutoff}

pair_coeff 3 3 ${epsilionsub} ${sigmasub} ${cutoffsub}

pair_coeff 1 2 ${epsilionmixed} ${sigmamixed} ${cutoff}

pair_coeff 1 3 ${epsilionsa} 5.5 16.5 #these numbers were changed to increase initial substrate adhesion

pair_coeff 2 3 ${epsilionsb} 5.5 16.5 #these numbers were changed to increase initial substrate adhesion


compute pe all pe/atom

compute s1 all stress/atom NULL pair

compute s2 all stress/atom NULL bond

compute s3 all stress/atom NULL ke


#####################################################

# Equilibration (Langevin dynamics at ? K)


group fixed type 3 #this selects all the atoms in the substrate,

group free type 1 2 #groups all the polymer "atoms"

fix freeze fixed setforce 0.0 0.0 0.0

fix freeze fixed setforce 0.0 0.0 0.0 #makes substrate immovile


fix zwall all wall/reflect zlo EDGE

fix grav free addforce 0 0 -5.0E-15 #added very very small gravity force to help the system towards adhering to substrate rather than floating away.


change_box all boundary p p s #make it such that the film can grow and shrink as dictated by the bond strength (stronger = smaller film), and temperature (higher = larger film).


minimize 1e-6 1e-6 1000 1000 #check to make sure there are no overlapping atoms

reset_timestep 0

velocity free create 5 123

fix nve free nve

fix 2 free langevin 5 25 10 12345

thermo_style custom step pe temp lx ly lz press vol v_epsiliona v_epsilionmixed

thermo 1000

timestep 0.174 #0.1 doesnt crash #1.74 ps used in paper

#dump 1 all custom 5000 dump.${name}.* id mol type x y z c_pe c_s1[1] c_s1[2] c_s1[3] c_s2[1] c_s2[2] c_s2[3] c_s3[1] c_s3[2] c_s3[3] #this should be commented out for production runs, useful for measuring the contributions to the stress by different potential components

dump simple all custom 5000 dump.s_${name}.* id mol type x y z vx vy vz c_pe


#fix bal all balance 1000 1.05 shift z 10 1.05 # needed if there is free volume on top to speed up simulation

run 5000

unfix 2

fix 2 free langevin 25 50 100 12345

run 15000

unfix 2



variable epsiliona equal 5.3/1000

variable epsilionb equal ${epsiliona}

variable epsilionmixed equal ${epsiliona}*0.9

pair_coeff 1 1 ${epsiliona} ${sigmaa}

pair_coeff 2 2 ${epsilionb} ${sigmab}

pair_coeff 1 2 ${epsilionmixed} ${sigmamixed}



fix 2 free langevin 50 166 1000 12345

run 50000

unfix 2

#unfix initfreeze

fix 2 free langevin 166 166 100 12345

run 20000


variable epsiliona equal 7.2/1000

variable epsilionb equal ${epsiliona}

variable epsilionmixed equal ${epsiliona}*0.9

pair_coeff 1 1 ${epsiliona} ${sigmaa}

pair_coeff 2 2 ${epsilionb} ${sigmab}

pair_coeff 1 2 ${epsilionmixed} ${sigmamixed}


run 5000


variable epsiliona equal 9.0/1000

variable epsilionb equal ${epsiliona}

variable epsilionmixed equal ${epsiliona}*0.9

pair_coeff 1 1 ${epsiliona} ${sigmaa}

pair_coeff 2 2 ${epsilionb} ${sigmab}

pair_coeff 1 2 ${epsilionmixed} ${sigmamixed}


run 5000 #step 100k


variable epsiliona equal 10.7/1000

variable epsilionb equal ${epsiliona}

variable epsilionmixed equal ${epsiliona}*0.9

pair_coeff 1 1 ${epsiliona} ${sigmaa}

pair_coeff 2 2 ${epsilionb} ${sigmab}

pair_coeff 1 2 ${epsilionmixed} ${sigmamixed}


unfix 2

fix 2 free langevin 166 250 1000 12345

run 50000


variable epsiliona equal 12.5/1000

variable epsilionb equal ${epsiliona}

variable epsilionmixed equal ${epsiliona}*0.9

pair_coeff 1 1 ${epsiliona} ${sigmaa}

pair_coeff 2 2 ${epsilionb} ${sigmab}

pair_coeff 1 2 ${epsilionmixed} ${sigmamixed}



unfix 2

fix 2 free langevin 250 250 100 12345

run 10000



variable epsiliona equal 14.3/1000

variable epsilionb equal ${epsiliona}

variable epsilionmixed equal ${epsiliona}*0.9

pair_coeff 1 1 ${epsiliona} ${sigmaa}

pair_coeff 2 2 ${epsilionb} ${sigmab}

pair_coeff 1 2 ${epsilionmixed} ${sigmamixed}


run 10000



variable epsiliona equal 16.1/1000

variable epsilionb equal ${epsiliona}

variable epsilionmixed equal ${epsiliona}*0.9

pair_coeff 1 1 ${epsiliona} ${sigmaa}

pair_coeff 2 2 ${epsilionb} ${sigmab}

pair_coeff 1 2 ${epsilionmixed} ${sigmamixed}


run 10000



variable epsiliona equal 17.9/1000

variable epsilionb equal ${epsiliona}

variable epsilionmixed equal ${epsiliona}*0.9

pair_coeff 1 1 ${epsiliona} ${sigmaa}

pair_coeff 2 2 ${epsilionb} ${sigmab}

pair_coeff 1 2 ${epsilionmixed} ${sigmamixed}


run 20000 #200k steps


write_data data.${name}_wbonds

bond_coeff 2 0 10

delete_bonds all bond 2 remove


special_bonds lj 0.0 1 1


print "==============BONDS BROKEN==================="


variable epsiliona equal 19.7/1000

variable epsilionb equal ${epsiliona}

variable epsilionmixed equal ${epsiliona}*0.9

pair_coeff 1 1 ${epsiliona} ${sigmaa}

pair_coeff 2 2 ${epsilionb} ${sigmab}

pair_coeff 1 2 ${epsilionmixed} ${sigmamixed}


run 20000

write_data data.${name}_wobonds.*


variable epsiliona equal 21.5/1000

variable epsilionb equal ${epsiliona}

variable epsilionmixed equal ${epsiliona}*0.9

pair_coeff 1 1 ${epsiliona} ${sigmaa}

pair_coeff 2 2 ${epsilionb} ${sigmab}

pair_coeff 1 2 ${epsilionmixed} ${sigmamixed}


run 20000


variable epsiliona equal 23.9/1000

variable epsilionb equal ${epsiliona}

variable epsilionmixed equal ${epsiliona}*0.9

pair_coeff 1 1 ${epsiliona} ${sigmaa}

pair_coeff 2 2 ${epsilionb} ${sigmab}

pair_coeff 1 2 ${epsilionmixed} ${sigmamixed}


run 10000 #250k steps


variable epsiliona equal 25.1/1000

variable epsilionb equal ${epsiliona}

variable epsilionmixed equal ${epsiliona}*0.9

pair_coeff 1 1 ${epsiliona} ${sigmaa}

pair_coeff 2 2 ${epsilionb} ${sigmab}

pair_coeff 1 2 ${epsilionmixed} ${sigmamixed}


unfix 2

fix 2 free langevin 250 300 1000 12345

run 50000 start 250000 stop 400000

write_data data.${name}_wobonds.*


variable epsiliona equal 26.9/1000

variable epsilionb equal ${epsiliona}

variable epsilionmixed equal ${epsiliona}*0.9

pair_coeff 1 1 ${epsiliona} ${sigmaa}

pair_coeff 2 2 ${epsilionb} ${sigmab}

pair_coeff 1 2 ${epsilionmixed} ${sigmamixed}


run 10000 start 250000 stop 400000

variable epsiliona equal 28.7/1000

variable epsilionb equal ${epsiliona}

variable epsilionmixed equal ${epsiliona}*0.9

pair_coeff 1 1 ${epsiliona} ${sigmaa}

pair_coeff 2 2 ${epsilionb} ${sigmab}

pair_coeff 1 2 ${epsilionmixed} ${sigmamixed}



run 10000 start 250000 stop 400000

variable epsiliona equal 30.5/1000

variable epsilionb equal ${epsiliona}

variable epsilionmixed equal ${epsiliona}*0.9

pair_coeff 1 1 ${epsiliona} ${sigmaa}

pair_coeff 2 2 ${epsilionb} ${sigmab}

pair_coeff 1 2 ${epsilionmixed} ${sigmamixed}



run 10000 start 250000 stop 400000

variable epsiliona equal 32.3/1000

variable epsilionb equal ${epsiliona}

variable epsilionmixed equal ${epsiliona}*0.9

pair_coeff 1 1 ${epsiliona} ${sigmaa}

pair_coeff 2 2 ${epsilionb} ${sigmab}

pair_coeff 1 2 ${epsilionmixed} ${sigmamixed}


run 10000 start 250000 stop 400000

variable epsiliona equal 34/1000

variable epsilionb equal ${epsiliona}

variable epsilionmixed equal ${epsiliona}*0.9

pair_coeff 1 1 ${epsiliona} ${sigmaa}

pair_coeff 2 2 ${epsilionb} ${sigmab}

pair_coeff 1 2 ${epsilionmixed} ${sigmamixed}



run 10000 start 250000 stop 400000

variable epsiliona equal 35.8/1000

variable epsilionb equal ${epsiliona}

variable epsilionmixed equal ${epsiliona}*0.9

pair_coeff 1 1 ${epsiliona} ${sigmaa}

pair_coeff 2 2 ${epsilionb} ${sigmab}

pair_coeff 1 2 ${epsilionmixed} ${sigmamixed}



run 10000 start 250000 stop 400000

variable epsiliona equal 37.6/1000

variable epsilionb equal ${epsiliona}

variable epsilionmixed equal ${epsiliona}*0.9

pair_coeff 1 1 ${epsiliona} ${sigmaa}

pair_coeff 2 2 ${epsilionb} ${sigmab}

pair_coeff 1 2 ${epsilionmixed} ${sigmamixed}



run 10000 start 250000 stop 400000

variable epsiliona equal 39.4/1000

variable epsilionb equal ${epsiliona}

variable epsilionmixed equal ${epsiliona}*0.9

pair_coeff 1 1 ${epsiliona} ${sigmaa}

pair_coeff 2 2 ${epsilionb} ${sigmab}

pair_coeff 1 2 ${epsilionmixed} ${sigmamixed}



run 10000 start 250000 stop 400000

variable epsiliona equal 41.2/1000

variable epsilionb equal ${epsiliona}

variable epsilionmixed equal ${epsiliona}*0.9

pair_coeff 1 1 ${epsiliona} ${sigmaa}

pair_coeff 2 2 ${epsilionb} ${sigmab}

pair_coeff 1 2 ${epsilionmixed} ${sigmamixed}



run 10000 start 250000 stop 400000

variable epsiliona equal 43.0/1000

variable epsilionb equal ${epsiliona}

variable epsilionmixed equal ${epsiliona}*0.9

pair_coeff 1 1 ${epsiliona} ${sigmaa}

pair_coeff 2 2 ${epsilionb} ${sigmab}

pair_coeff 1 2 ${epsilionmixed} ${sigmamixed}



run 10000 start 250000 stop 400000

variable epsiliona equal 44.8/1000

variable epsilionb equal ${epsiliona}

variable epsilionmixed equal 40.3/1000

#variable epsilionmixed equal 40.3

pair_coeff 1 1 ${epsiliona} ${sigmaa}

pair_coeff 2 2 ${epsilionb} ${sigmab}

pair_coeff 1 2 ${epsilionmixed} ${sigmamixed}


unfix 2

fix 2 free langevin 300 300 1000 12345

run 50000


write_data data.final_${name}

write_data data.spincast_BCP

write_restart restart.final_${name}


#run 500000

#write_data data.final_BCP_longequil.*



### ericnhahn@gmail.com ###

### BCP intial conditions ###

### Version 0.1 - 03/09/2022###


### in.BCP_run ###


# VARIABLES

variable name string BCP_spin_run0p2


# Initialization

units metal

boundary p p s #used to be ppf with free volume

atom_style molecular

log log.${name}.txt

bond_style harmonic #these need to be defined before data is read

angle_style harmonic

pair_style lj/cut 25 #this needs to be defined before data is read to set neighbor distance calculations

read_data data.spincast_BCP

delete_bonds all bond 2 remove #double check to make sure there are no bonds between chains


# potential information

#bond_style harmonic

bond_coeff 1 0.128 10

bond_coeff 2 0 10

#angle_style harmonic

angle_coeff 1 0 180


variable epsiliona equal 49/1000

variable sigmaa equal 8.4

variable epsilionb equal 41.3/1000

variable sigmab equal 8.4

variable epsilionsub equal 1/1000

variable sigmasub equal 8.4

variable epsilionsa equal 32/1000 #Capital Gamma, Bfavored=0.2 12.8 Nuetral=0.5 32 Afavored=0.8 51.2

variable sigmasa equal ${sigmasub}

variable epsilionsb equal 32/1000 #Capital Gamma, Bfavored=0.2 51.2 Nuetral=0.5 32 Afavored=0.8 12.8

variable sigmasb equal ${sigmasub}

variable epsilionmixed equal 25.8/1000

variable sigmamixed equal ${sigmaa}

variable cutoff equal 3*${sigmaa}

variable cutoffsub equal 3*${sigmasub}

# cutoff = 3σ


special_bonds lj 0.0 1 1


pair_style lj/cut ${cutoff}

pair_coeff 1 1 ${epsiliona} ${sigmaa} ${cutoff}

pair_coeff 2 2 ${epsilionb} ${sigmab} ${cutoff}

pair_coeff 3 3 ${epsilionsub} ${sigmasub} ${cutoffsub}

pair_coeff 1 2 ${epsilionmixed} ${sigmamixed} ${cutoff}

pair_coeff 1 3 ${epsilionsa} 5.5 16.5 #these numbers were changed to increase initial substrate adhesion

pair_coeff 2 3 ${epsilionsb} 5.5 16.5


compute pe all pe/atom


group fixed type 3

group free type 1 2

fix freeze fixed setforce 0.0 0.0 0.0


fix zwall all wall/reflect zlo EDGE

fix grav free addforce 0 0 -5.0E-15


thermo_style custom step temp lx ly lz press vol

thermo 1000

timestep 0.174 #0.1 doesnt crash #1.74 ps used in paper

dump 1 all custom 200 dump.${name}.* id mol type x y z c_pe


#needed to reinitialize bonds without blowing the system size out due to new potential parameters

fix nve free nve/limit 0.1

fix 2 free langevin 300 300 250 12345

run 1000

unfix nve

fix nve free nve

run 19000

write_data data.${name}_preT514

unfix 2


#now we are ready to start a long run at elevated temperature to evaluate BCP layer evolution

fix 2 free langevin 300 514 250 12345

run 1000000

write_data data.${name}_T514

unfix 2

fix 2 free langevin 514 514 100 12345

run 1000000

write_data data.${name}_T514time_evol