mass_atom.m
- This function fetches the mass for each atomtype and place it into the the field [atom.mass]. It also tries to calculate the (Box) molecular weight, box volume and density.
Contents
Version
2.11
Contact
Please report problems/bugs to michael.holmboe@umu.se
Examples
- atom = mass_atom(atom)
- atom = mass_atom(atom,Box_dim) % To calculate the density
function atom = mass_atom(atom,varargin)
element=element_atom(atom); mass={... 1.00794 'Hydrogen' 'H' 1 ;... 4.0026 'Helium' 'He' 2 ;... 6.941 'Lithium' 'Li' 3 ;... 9.0122 'Beryllium' 'Be' 4 ;... 10.811 'Boron' 'B' 5 ;... 12.0107 'Carbon' 'C' 6 ;... 14.0067 'Nitrogen' 'N' 7 ;... 15.9994 'Oxygen' 'O' 8 ;... 18.9984 'Fluorine' 'F' 9 ;... 20.1797 'Neon' 'Ne' 10 ;... 22.9897 'Sodium' 'Na' 11 ;... 24.305 'Magnesium' 'Mg' 12 ;... 26.9815 'Aluminum' 'Al' 13 ;... 28.0855 'Silicon' 'Si' 14 ;... 30.9738 'Phosphorus' 'P' 15 ;... 32.065 'Sulfur' 'S' 16 ;... 35.453 'Chlorine' 'Cl' 17 ;... 39.0983 'Potassium' 'K' 19 ;... 39.948 'Argon' 'Ar' 18 ;... 40.078 'Calcium' 'Ca' 20 ;... 44.9559 'Scandium' 'Sc' 21 ;... 47.867 'Titanium' 'Ti' 22 ;... 50.9415 'Vanadium' 'V' 23 ;... 51.9961 'Chromium' 'Cr' 24 ;... 54.938 'Manganese' 'Mn' 25 ;... 55.845 'Iron' 'Fe' 26 ;... 58.6934 'Nickel' 'Ni' 28 ;... 58.9332 'Cobalt' 'Co' 27 ;... 63.546 'Copper' 'Cu' 29 ;... 65.39 'Zinc' 'Zn' 30 ;... 69.723 'Gallium' 'Ga' 31 ;... 72.64 'Germanium' 'Ge' 32 ;... 74.9216 'Arsenic' 'As' 33 ;... 78.96 'Selenium' 'Se' 34 ;... 79.904 'Bromine' 'Br' 35 ;... 83.8 'Krypton' 'Kr' 36 ;... 85.4678 'Rubidium' 'Rb' 37 ;... 87.62 'Strontium' 'Sr' 38 ;... 88.9059 'Yttrium' 'Y' 39 ;... 91.224 'Zirconium' 'Zr' 40 ;... 92.9064 'Niobium' 'Nb' 41 ;... 95.94 'Molybdenum' 'Mo' 42 ;... 98 'Technetium' 'Tc' 43 ;... 101.07 'Ruthenium' 'Ru' 44 ;... 102.9055 'Rhodium' 'Rh' 45 ;... 106.42 'Palladium' 'Pd' 46 ;... 107.8682 'Silver' 'Ag' 47 ;... 112.411 'Cadmium' 'Cd' 48 ;... 114.818 'Indium' 'In' 49 ;... 118.71 'Tin' 'Sn' 50 ;... 121.76 'Antimony' 'Sb' 51 ;... 126.9045 'Iodine' 'I' 53 ;... 127.6 'Tellurium' 'Te' 52 ;... 131.293 'Xenon' 'Xe' 54 ;... 132.9055 'Cesium' 'Cs' 55 ;... 137.327 'Barium' 'Ba' 56 ;... 138.9055 'Lanthanum' 'La' 57 ;... 140.116 'Cerium' 'Ce' 58 ;... 140.9077 'Praseodymium' 'Pr' 59 ;... 144.24 'Neodymium' 'Nd' 60 ;... 145 'Promethium' 'Pm' 61 ;... 150.36 'Samarium' 'Sm' 62 ;... 151.964 'Europium' 'Eu' 63 ;... 157.25 'Gadolinium' 'Gd' 64 ;... 158.9253 'Terbium' 'Tb' 65 ;... 162.5 'Dysprosium' 'Dy' 66 ;... 164.9303 'Holmium' 'Ho' 67 ;... 167.259 'Erbium' 'Er' 68 ;... 168.9342 'Thulium' 'Tm' 69 ;... 173.04 'Ytterbium' 'Yb' 70 ;... 174.967 'Lutetium' 'Lu' 71 ;... 178.49 'Hafnium' 'Hf' 72 ;... 180.9479 'Tantalum' 'Ta' 73 ;... 183.84 'Tungsten' 'W' 74 ;... 186.207 'Rhenium' 'Re' 75 ;... 190.23 'Osmium' 'Os' 76 ;... 192.217 'Iridium' 'Ir' 77 ;... 195.078 'Platinum' 'Pt' 78 ;... 196.9665 'Gold' 'Au' 79 ;... 200.59 'Mercury' 'Hg' 80 ;... 204.3833 'Thallium' 'Tl' 81 ;... 207.2 'Lead' 'Pb' 82 ;... 208.9804 'Bismuth' 'Bi' 83 ;... 209 'Polonium' 'Po' 84 ;... 210 'Astatine' 'At' 85 ;... 222 'Radon' 'Rn' 86 ;... 223 'Francium' 'Fr' 87 ;... 226 'Radium' 'Ra' 88 ;... 227 'Actinium' 'Ac' 89 ;... 231.0359 'Protactinium' 'Pa' 91 ;... 232.0381 'Thorium' 'Th' 90 ;... 237 'Neptunium' 'Np' 93 ;... 238.0289 'Uranium' 'U' 92 ;... 243 'Americium' 'Am' 95 ;... 244 'Plutonium' 'Pu' 94 ;... 247 'Curium' 'Cm' 96 ;... 247 'Berkelium' 'Bk' 97 ;... 251 'Californium' 'Cf' 98 ;... 252 'Einsteinium' 'Es' 99 ;... 257 'Fermium' 'Fm' 100 ;... 258 'Mendelevium' 'Md' 101 ;... 259 'Nobelium' 'No' 102 ;... 261 'Rutherfordium' 'Rf' 104 ;... 262 'Lawrencium' 'Lr' 103 ;... 262 'Dubnium' 'Db' 105 ;... 264 'Bohrium' 'Bh' 107 ;... 266 'Seaborgium' 'Sg' 106 ;... 268 'Meitnerium' 'Mt' 109 ;... 272 'Roentgenium' 'Rg' 111 ;... 277 'Hassium' 'Hs' 108 ;... }; ind=[];ind_array=[]; if iscell([element.type]) && length([element.type]) > 1 for i=1:length([element.type]) ind=find(strncmpi([element(i).type],mass(:,3),2)); if numel(ind) == 0 ind=find(strncmpi([element(i).type],mass(:,3),1)); if numel(ind) == 0 disp('Could not find mass for') disp([element(i).type]) disp('setting it to 10 au') ind = 6; end end ind_array=[ind_array ind(1)]; end ind=ind_array; else ind=find(strcmpi([element.type],mass(:,1))) if numel(ind) == 0 ind = 6; end end atnum = cell2mat(mass(ind,4)); mass = cell2mat(mass(ind,1)); for i=1:length([atom.type]) [atom(i).mass]=mass(i); [atom(i).atnum]=atnum(i); end
Set the occupancy of all sites
occ=1; if ~isfield(atom,'occupancy') occ=1; try atom = occupancy_atom(atom,Box_dim); catch [atom.occupancy]=deal(1); end end % disp('Molecular weight in g/mol, Mw:') Mw=sum([atom.mass]); % disp('Molecular weight in g/mol, considering Mw_occupancy:') Mw_occupancy=sum([atom.mass].*[atom.occupancy]); if nargin>1 Box_dim=varargin{1}; lx=Box_dim(1); ly=Box_dim(2); lz=Box_dim(3); if size(Box_dim,2)==9 xy=Box_dim(6); xz=Box_dim(8); yz=Box_dim(9); else xy=0; xz=0; yz=0; end a=lx; b=(ly^2+xy^2)^.5; c=(lz^2+xz^2+yz^2)^.5; alfa=rad2deg(acos((ly*yz+xy*xz)/(b*c))); beta=rad2deg(acos(xz/c)); gamma=rad2deg(acos(xy/b)); Box_volume=a*b*c*(1 - cos(deg2rad(alfa))^2 - cos(deg2rad(beta))^2 - cos(deg2rad(gamma))^2 + 2*cos(deg2rad(alfa))*cos(deg2rad(beta))*cos(deg2rad(gamma)))^.5; Box_density=Mw_occupancy/6.022E23/(Box_volume*1E-24); % disp('Volume in Å^3:') % Box_volume % disp('Density in g/cm^3') % Box_density assignin('caller','Box_volume',Box_volume); assignin('caller','Box_density',Box_density); end assignin('caller','Mw',Mw); assignin('caller','Mw_occupancy',Mw_occupancy); if occ==0 atom = rmfield(atom,'occupancy'); end