) 7 1 0 2
t s u g
Structure Solution from Powder Data-II: u A
h t 0 2 - h t
Real Space Methods 5 1 (
l o o h c S
g n i t u p m o C
c i h p a r g o l l a t s y r C
-
a i d n I
, e r o l a g n a B
BuildingBuilding startingstarting modelmodel
It is necessary to know the molecular connectivity. ) 7
Spectroscopic techniques (MS, NMR) can be useful 1 0 2
t s u g u A
h t 0 2 - h t 5 1 (
l o o h c S
g n i t u p m o C
c i h p a
Crystal structure can be described as a combination of building blocks r g o l l a t s y r C
-
a i d n I
, e r o l a g n a B
atom molecule polyhedron BuildingBuilding startingstarting modelmodel )
Check for similar molecules in databases or in the literature 7 1 0 2
t s u g u A
h t 0 2 - h t 5 1 (
l o o
Optimize molecular geometry by computational chemistry h c S
g n i t u programs p m o C
c i h p a r g o l l a t s y r C
-
a i d n I
, e http://www.ba.ic.cnr.it/ochemdb/ r o l a g n
Login: CCS2017 a Password: IUCR2017 B
CrystalCrystal StructureStructure DatabasesDatabases ) 7
Non-commercial database are in red 1 0 2
t s u g u A CSD (Cambridge Structural Database) (organics & organometallics): h t 0 2 - h t 5
http://www.ccdc.cam.ac.uk/ 1 (
l o o h c
ICSD (Inorganic Crystal Structure Database) S
g n i t u (inorganics, elements, minerals & intermetallics): http://icsd.ill.fr/ p m o C
c i h
COD (Crystallography Open Database) (general database): p a r g o l l a t
http://www.crystallography.net/ s y r C
-
a i d n I
Other databases: ICDD PDF-4+, American Mineralogist Crystal Structure , e r o Database, MINCRYST, Zeolite Structures Database, ... l a g n a B
File format: CIF (Crystallographic Information File)
FreeFree ChemistryChemistry DatabasesDatabases ) 7 1
PubChem: https://pubchem.ncbi.nlm.nih.gov/ 0 2
t s u g u A
NIST Chemistry WebBook: http://webbook.nist.gov/chemistry/ h t 0 2 - h t
Drugbank: http://www.drugbank.ca/ 5 1 (
l o o h c S
Other databases: ZINC, eMolecules, ChEBI, NMRShiftDB, ... g n i t u p m o C
c i h p a r g o l l a t s y r C
-
Chemical file formats: sdf, mol, mol2, cml, SMILES a i d n I
, e r o l a g n a 2D molecular structures must be optimized before being B used for structure solution
GeometryGeometry optimizationoptimization
Three levels of theory ) 7 1 0 2
t s u
Molecular-mechanics force fields (MM) g u A
h t 0 2 - h t 5
Semi-empirical methods (SE) 1 (
l o o h c S
g n i Ab initio methods: Hartree–Fock methods, density t u p m o
functional theory (DFT) C
c i h p a r g o l l a t s y Strategy: r MM → SI → DFT C
-
a i d n I
, e r o l a g n a B Programs: MOPAC, Gamess, NWChem, Gaussian, ABINIT, ORCA, Molpro, Q-Chem, octopus, etc.
MoleculeMolecule editoreditor
A molecule editor allows ) 7 1 0 2
Sketch molecules in 2D or 3D format t s u g u A
h
Optimize the geometry by force field method t 0 2 - h t 5 1 (
Create input file for the quantum-chemistry calculations l o o h c S
Read output files of the most common computational packages g n i t u p m o C
c i h p a r g o l l a
Some free available software t s y r C
-
a i d
ACD/ChemSketch - http://www.acdlabs.com n I
, e r o l a
Avogadro - http://avogadro.openmolecules.net/wiki/Main_Page g n a B MarvinSketch - http://www.chemaxon.com/products/marvin/ Gabedit: http://gabedit.sourceforge.net/
BuildingBuilding startingstarting modelmodel ) 7 1 0 2
t s u g u A
h t 0 2 -
3D structure optimization h t 5 1 (
l o o
Save as h c S
.mol, .mol2, g n i t u
.fhz, .mop, p m o C
.cif, .pdb, .frac c i h p a r g o l l a t s y r C
-
a i d n I
2-(4-Hydroxy-2-oxo-2,3-dihydro-1,3-benzothiazol-7-yl) , e ethylammonium chloride r o N = 2 l frag a g n a P 21/a Ndof = 6 + 3 + 2 B
program example4 ! ! Crystal structure solution of paracetamol (form I) by real space method. ! use iso_fortran_env, only: stdout => OUTPUT_UNIT,ERROR_UNIT use crystal_phase use gen_frm use errormod use datasetmod use prog_constants
use variables, only: cryst,dataset ) 7
use general, only: lo 1 0 2
use molcom, only: kscreen t s
use sannel u g
implicit none u A type(error_type) :: err Paracetamol (form I polymorph) h t
type(dataset_type) :: datas 0
C H NO 2 integer :: ier 8 9 2 - h t
type(SimAnn_Conditions_type) :: sc 5 1 (
type(bb_bc_condition) :: bcond l
! o o
! Initialize libexpo h c S
call InitExpo2002(0) g
lo = stdout n i t
kscreen = 0 u call load_chemical_tables('../files/',err) p m
if (err%signal) then o C
write(ERROR_UNIT,'(a)')' Message: '//err%msg() c i
stop 1 h p a
endif r g o l
! l a t
! Set up crystal phase s y call new_phases(cryst,1) r C
- call cryst(1)%set_symmetry(init_spaceg_type('P 21/n'), set_cell_type([7.100,9.380,11.708,90.0,97.42,90.0])) a i
call crystal_file_import(cryst(1),'paracetamol.mol',has_symmetry=.true.,err=err) d n I
if (err%signal) stop 2 , e r o
! l a
! Set up XRPD data set g n
call datas%open_file('paracetamol.xy',ier,wavel=CU_WAVE) a B if (ier /= 0) stop 3 call push_back_dataset(dataset,datas) call dataset_to_expo(dataset(1)) ! ! Run global optimization call sa_prelim(goptim,sc,bcond,.true.,saerr=err); if (err%signal) stop 4 call sa_run(goptim,sc,bcond) ! end program example4 HH atomsatoms
H atoms do not contribute significantly to X-ray diffraction, they can be
ignored during the structure solution ) 7 1 0 2
t s u g u A
h
Eliminating the H atoms reduces the number of atoms and DoFs, t 0 2 - h decreasing the time to evaluate CF for each trial structure t 5 1 (
l o o h c S
Delete H atoms g n i t u p
subroutine remove_atoms_from_list(atoms,veta,val,[bonds],[iord]) m o C
c i h p a e.g. call remove_atoms_from_list(atoms,atoms%z(),H_at,bonds) r g o l l a t s y r C
-
a i d n I
,
X-H (X-ray) < X-H (neutrons) e r o l a
Add H atoms at X-ray distances g
0.82 Å (X-ray) n a B 0.95 Å (neutrons)
subroutine add_hydrogens(atoms,bonds,elem,cell,spg,[vat],[htype],ier) HydrogenHydrogen calculationcalculation ) 7 1 0 2
t s u g u A
h t 0 2 - h t 5 1 (
l o o h c S
g n i t u p m o C
c i h p a r g o l l a t s y r C
-
a i d n I
, e r o l a g n a B Hydrogen atoms are positioned geometrically
Program organization ) 7 1 0 2
t
Parameters are adjusted simultaneously s u g u A
h t 0 2 - h t
Random displacement of 5 1 (
l o
... o h
evaluation c S
g n i t u p m o C
c i h p a r g o l l a t s
Parameters are adjusted individually and sequentially y r C
-
a i d n I
,
Random Random e r o l
displacement of displacement of a g
... n a
evaluation B
In the calculation of the structure factors only the contributes of parameter x will be update i Program organization ) 7 1 0 2
t s u g u A
h t 0 2 - h t 5 1 (
l o o h c S
g n i t u p m o C
c i
Centrosymmetric crystal structure: h p a r g o l l a t s y r C
-
a i d n I
, e r o l a g n a In the calculation of the structure factors only the B contributes of the displaced atoms will be update. Rotated atoms are circled in blue
SimulatedSimulated annealingannealing optionsoptions
Cost function ) 7 1 0 2
t s u
Resolution g u A
h t 0 2 - h
Random seed t 5
● 1 (
No. of molecular fragments l o
● o h
No. of external DoFs c
Number of moves S
● g n
No. of internal DoFs i t u
● p
The flexibility of the molecule m
Number of SA runs o C
c i h p a r g
Starting temperature o l l a t s y r C
- Temperature reduction factor a i d n I
, e r o ! l a g
! Run global optimization n a call sa_prelim(goptim,sc,bcond,.true.,saerr=err); if (err%signal) stop 4 B goptim%nrun = 100 sc%nt=100; sc%autont=.false. call sa_run(goptim,sc,bcond)
FLEXFLEX parameterparameter
nDoF = number of internal DoFs f = number of coupled DoFs
i ) 7 1 0 2
t s u g u A
h t 0 2 - h t 5 1 (
FLEX = 9 + (0 + 1 + 2 +3 + 4 + 3 + 2 + 1 + 0) = 25 0 l o o h 1 In red the values of for each c
f S 2 4 2 g 3 0 internal DoF in the famotidine. n 3 i 1 t u
H-atoms were ignored p m o C
c i h p a r
FLEX = 6 +(0 + 1 + 2 +1 + 1 + 0) = 11 g o l l a t s y r C
- 0 1 1 2 1 0 a i d n I
, e r o l a g n a B
FLEX=0 FLEX=7 FLEX=64 Cost Functions ) 7 1 0 2
Whole profile R factors: t s u g u A
h t 0 2 - h t 5 1 (
l o o h c S
g n i t u p m o C
c i h p a r g o l l a t
Integrated intensities R factors: s y r C
-
a i d n I
, e r o l a g n a Other cost functions: B
MolecularMolecular compoundscompounds
Paracetamol (form I polymorph)
(C8H9NO2) * ) 7 1 0 2
t s u g u A
h t 0 2 - h t 5 1 (
l o o h c S
g n i t u p m o C
c i h p a r g o l l a t s y r C
-
a i d n I
, e r o l a g n a B
*Nichols, C. & Frampton, C. S. (1998). J. Pharm. Sci. 87, 684–693. Non-molecularNon-molecular compoundscompounds ) 7 1 0 2
Crystal structure of Sb (PO4) * 2 3 t s u g u A
h t 0 2 - h t 5 1 (
l o o h c S
g n i t u p m o C
c i h p a r g o l l a t s y r C
-
a i d n I
, e r o l a g n a B
*Jouanneaux, A., Verbaere, A., Guyomard, D., Piffard, Y., Oyetola, S. & Fitch, A. N. (1991). Eur. J. Solid State Inorg. Chem. 28, 755-765. Non-molecularNon-molecular compoundscompounds ) 7 1 0 2
t s u g u A
h t 0 2 - h t 5 1 (
l o o h c S
g n i t u N = 51 Sb (PO ) p dof 2 4 3 m o C
c i h p a r g o l l a t
N = 30 s
dof y r C
-
a i d n I
, e r o l a g n a B
Ndof = 24
program example5 ! ! Crystal structure solution of Sb2(PO4)3 by real space method. ! use iso_fortran_env, only: stdout => OUTPUT_UNIT,ERROR_UNIT use crystal_phase use gen_frm use errormod use datasetmod use prog_constants use variables, only: cryst,dataset
use general, only: lo,alambda ) 7
use molcom, only: kscreen 1 0
use sannel 2
t implicit none s
type(error_type) :: err u g
type(dataset_type) :: datas u A integer :: ier h t
type(SimAnn_Conditions_type) :: sc 0 2
type(bb_bc_condition) :: bcond - h ! t 5 1
! Initialize libexpo (
l
call InitExpo2002(0) o
lo = stdout o h
kscreen = 0 c S
call load_chemical_tables('../files/',err) g n if (err%signal) then i t
write(ERROR_UNIT,'(a)')' Message: '//err%msg() u p
stop 1 m
endif o C
c
! i h
! Set up crystal phase p a r
call new_phases(cryst,1) g o l call cryst(1)%set_symmetry(init_spaceg_type('P 21/n'),set_cell_type([11.936,8.7354,8.3185,90.0,91.12,90.0])) l a t
call crystal_fragment_import(cryst(1),'tetra P O',RX_SOURCE,err); if (err%signal) stop 2 s y r
call crystal_fragment_import(cryst(1),'tetra P O',RX_SOURCE,err); if (err%signal) stop 2 C
- call crystal_fragment_import(cryst(1),'tetra P O',RX_SOURCE,err); if (err%signal) stop 2 a i
call crystal_fragment_import(cryst(1),'octa Sb O',RX_SOURCE,err); if (err%signal) stop 2 d n I
call crystal_fragment_import(cryst(1),'octa Sb O',RX_SOURCE,err); if (err%signal) stop 2 , e ! r o l
! Set up XRPD data set a g
call datas%open_file('sbpo.dat',ier,wavel=1.45072,sync=.true.) n a
if (ier /= 0) stop 3 B call push_back_dataset(dataset,datas) call dataset_to_expo(dataset(1)) ! ! Run global optimization with d.o.c call sa_prelim(goptim,sc,bcond,.true.,saerr=err) call cryst(1)%set_doc(.true.) call sa_run(goptim,sc,bcond) ! end program example5 program example5 ! ! Crystal structure solution of Sb2(PO4)3 by real space method. ! use iso_fortran_env, only: stdout => OUTPUT_UNIT,ERROR_UNIT use crystal_phase use gen_frm use errormod use datasetmod use prog_constants use variables, only: cryst,dataset
use general, only: lo,alambda ) 7
use molcom, only: kscreen 1 0
use sannel 2
t implicit none s
type(error_type) :: err u g
type(dataset_type) :: datas u A integer :: ier h t
type(SimAnn_Conditions_type) :: sc 0 2
type(bb_bc_condition) :: bcond - h ! t 5 1
! Initialize libexpo (
l
call InitExpo2002(0) o
lo = stdout o h
kscreen = 0 c S
call load_chemical_tables('../files/',err) g n if (err%signal) then i t
write(ERROR_UNIT,'(a)')' Message: '//err%msg() u p
stop 1 m
endif o C
c
! i h
! Set up crystal phase p a r
call new_phases(cryst,1) g o l call cryst(1)%set_symmetry(init_spaceg_type('P 21/n'),set_cell_type([11.936,8.7354,8.3185,90.0,91.12,90.0])) l a t
call crystal_fragment_import(cryst(1),'tetra P O',RX_SOURCE,err); if (err%signal) stop 2 s y r
call crystal_fragment_import(cryst(1),'tetra P O',RX_SOURCE,err); if (err%signal) stop 2 C
- call crystal_fragment_import(cryst(1),'tetra P O',RX_SOURCE,err); if (err%signal) stop 2 a i
call crystal_fragment_import(cryst(1),'octa Sb O',RX_SOURCE,err); if (err%signal) stop 2 d n I
call crystal_fragment_import(cryst(1),'octa Sb O',RX_SOURCE,err); if (err%signal) stop 2 , e ! r o l
! Set up XRPD data set a g
call datas%open_file('sbpo.dat',ier,wavel=1.45072,sync=.true.) n a
if (ier /= 0) stop 3 B call push_back_dataset(dataset,datas) call dataset_to_expo(dataset(1)) ! ! Run global optimization with d.o.c call sa_prelim(goptim,sc,bcond,.true.,saerr=err) call cryst(1)%set_doc(.true.) call sa_run(goptim,sc,bcond) ! end program example5 Non-molecularNon-molecular compoundscompounds ) 7 1 0
You cannot know the number and the type of the polyhedra 2
t s u g u A
h t 0 2 - h t 5 1 (
l o o h c S
Some atoms are expected to fall on special position g n i t u p m o C
c i h p a r g o l l a t s y r C
-
a i
Different building blocks share some atoms d n I
, e r o l a g n a B
DynamicalDynamical occupancyoccupancy correctioncorrection (DOC)(DOC)
Falcioni, M. & Newsam, J. M. (1989). Nature 342, 260-262. ) 7
Favre-Nicolin, V. & Černỳ, R. (2002). J. Appl. Cryst.. 35, 734-743 1 0 2
t s u g u A
h t 0 2 - h t 5 1 (
l o o h c S
g n i t u p m o C
c i h p a r g o l l a t s y r C
-
a i d n I
, e r
USE atom_type_util o l a g call compute_doc_atoms(atom,cell,spg,distmin) n a B
DOC is able to merge the excess atoms automatically RangeRange searchingsearching ofof atomsatoms ) 7 1 0 2
t s u g u A
h Given a set of atoms in the t 0 2 - h t
space, which of those atoms fall 5 1 (
l o
within some specified area? o h c S
g n i t u p m o C
c i h p a r g o l l a t s y Methods available * r C
-
a i
● d n
Sequential search I
, e r o l a
● g
Grid method n a B
* R. Sedgewick, Algorithms in C, Addison-Wesley publishing company, 1983, chap. 26 RangeRange searchingsearching ofof atomsatoms ) 7 1 0 2
t s u g u A
h t 0 2 - h t 5 1 (
call crystal%make_symmetry_cell() l o o h c S
g n i t u p m o C
c i h p a r g o l l a t s y r C
-
a i d n I
call crystal%allocate_grid(cutoff=1.0) , e r o l a g n a
call crystal%fill_grid() B
call crystal%compute_doc(1.0)
Parallel Machines
Supercomputers Marconi by CINECA (Italy)
244.800 cores in total ) 7 1 0 2
t s u g u A
h t 0 2 - h t 5 1 (
Workstations l
Typically 4- 18 cores o o h c S
g n i t u p m o C
c i h p a Typically 2- 4 cores r Notebooks g o l l a t s y r C
-
a i d n I
, e r o l
Typically 2- 4 cores a
Smartphones g n a B
Graphical Processing Units Up to 3000 cores
Three Protocols ) 7 1 0 2
t
Message Passing Interface (MPI) s u g u A
h t 0
Distributed-memory systems 2 - h t 5 1 (
l o o h c S
g n i t u
Open MultiProcessing (OpenMP) p m o C
c Shared-memory systems i h p a r g o l l a t s y r C
-
a i
Compute Unified Device Architecture (CUDA) d n I
, e r o Open Computing Language (OpenCL) l a g n a Coprocessor architecture B
Three Protocols ) 7 1 0 2
t
Message Passing Interface (MPI) s u g u A
h t 0
Distributed-memory systems 2 - h t 5 1 (
l o o h c S
g n i t u
Open MultiProcessing (OpenMP) p m o C
c Shared-memory systems i h p a r g o l l a t s y r C
-
a i
Compute Unified Device Architecture (CUDA) d n I
, e r o Open Computing Language (OpenCL) l a g n a Coprocessor architecture B
Running the Parallel Version of Expo2014 ) 7 1 0 2
t s u
Computer with multi-core CPUs and Linux environment. g u A
h t 0 2 - h t
Open MPI installed. 5 1 (
l o o h c S
Compiling Expo2014 from source and linking with MPI libraries g n i t u p m o C
c Run Expo2014 by using the launcher mpirun with the appropriate options. i h p a r g o l l a t s y r C
-
a i d n I
,
mpirun -np 10 expo input_file.exp e r o l a g n a B
program example5 ! ! Crystal structure solution of Sb2(PO4)3 by real space method. ! use iso_fortran_env, only: stdout => OUTPUT_UNIT,ERROR_UNIT use crystal_phase use gen_frm use errormod use datasetmod use prog_constants use variables, only: cryst,dataset use general, only: lo
use molcom, only: kscreen ) 7
use sannel 1 0
use bb_bc 2
t
use mpi_prog s u
implicit none g type(error_type) :: err u A
type(dataset_type) :: datas h t
integer :: ier 0 2 type(SimAnn_Conditions_type) :: sc - h t
type(bb_bc_condition) :: bcond 5 1 ( integer :: mpi_err l
! o o
call mpi_prog_init() h c
! S
! Initialize libexpo g n i
call InitExpo2002(0) t u
lo = stdout p
kscreen = 0 m 1) ./configure FC=mpif90 o
call load_chemical_tables('../files/',err) C
c
if (err%signal) then i
2) h write(ERROR_UNIT,'(a)')' Message: '//err%msg(); stop 1 mpirun -np 4 ./example5 p a
endif r g
! o l l
! Set up crystal phase a t
call new_phases(cryst,1) s y cryst(1)%cr_name='sbpo' r C
call cryst(1)%set_symmetry(init_spaceg_type('P 21/n'),set_cell_type([11.936,8.7354,8.3185,90.0,91.12,90.0])) -
a
call crystal_fragment_import(cryst(1),'tetra P O',RX_SOURCE,err); if (err%signal) stop 2 i d
call crystal_fragment_import(cryst(1),'tetra P O',RX_SOURCE,err); if (err%signal) stop 2 n I
call crystal_fragment_import(cryst(1),'tetra P O',RX_SOURCE,err); if (err%signal) stop 2 , e call crystal_fragment_import(cryst(1),'octa Sb O',RX_SOURCE,err); if (err%signal) stop 2 r o l
call crystal_fragment_import(cryst(1),'octa Sb O',RX_SOURCE,err); if (err%signal) stop 2 a g
! n
! Set up XRPD data set a call datas%open_file('sbpo.dat',ier,wavel=1.45072,sync=.true.) B if (ier /= 0) stop 3 call push_back_dataset(dataset,datas) call dataset_to_expo(dataset(1)) ! ! Run global optimization with d.o.c call sa_prelim(goptim,sc,bcond,.true.,saerr=err) call cryst(1)%set_doc(.true.) call sa_run(goptim,sc,bcond) call MPI_Finalize(mpi_err) ! end program example5 DS with Low Quality Diffraction Pattern ) 7 1 0 2
t s u
BondBond valencevalence restraintsrestraints g u A
h t 0 2 - h t 5 1 (
l o o
Anti-bumpingAnti-bumping restraintsrestraints h c S
g n i t u p m o C
c i h
MolecularMolecular geometrygeometry restraintsrestraints p a r g o l l a t s y r C
-
a i d n I
, e r o l a g n a B
BondBond ValenceValence RestraintsRestraints
Atomic valence Vi of atom i in crystal structure is the sum of individual bond valences Sij ) 7 1 0 2
t s u g u A
h t 0 2 -
distance between atoms i and j h t 5 1 (
l o o
bond valence parameters (bvparmyyyy.cif maintened by I.D. Brown and h c S
available from http://www.iucr.org/resources/data/datasets/bond-valence-parameters) g n i t u p m o C
c i h p a r g o l global- index l
instability a t s y r C
-
a i d n I
, e r o l a g n The estimated values V can be incorporated as restraints in the cost function (*): a i B
* J. Pannetier, J. Bassas-Alsina, J. Rodriguez-Carvajal & V. Caignaert, (1990). Nature 346, 343 - 345 program example6 use iso_fortran_env, only: stdout => OUTPUT_UNIT, ERROR_UNIT use crystal_phase use gen_frm use errormod use symmgrid implicit none type(crystal_phase_t) :: cryst type(error_type) :: err )
integer :: ia,ncoord 7 1
real, dimension(:), allocatable :: bvs 0 2
type(bond_info_t), dimension(:), allocatable :: dinfo t s ! u LaTi Al O * g 2 9 19 u
call load_chemical_tables('../files/',err) A
h
if (err%signal) then t 0 2
write(ERROR_UNIT,'(a)')' Message: '//err%msg(); stop 1 - h endif t 5 1 (
! l o call crystal_file_import(cryst,'LaTi_true.cif',err=err) o h
if (err%signal) stop 2 c S ! g n i
! Bond valence parameters t u
call cryst%load_bvparam() p m
call cryst%print_bvparam(stdout) o C
! c i
! Initialization for bond valence h p a
call cryst%make_symmetry_cell() r g o l
call cryst%allocate_grid(cutoff=maxval(cryst%bvpar(:,:)%rmax)) l a call cryst%fill_grid() t s y ! r C
-
! Bond valence sum and additional info a allocate(bvs(cryst%natoms())) i d n I
do ia=1,cryst%natoms() , e
call cryst%compute_bvs(ia,bvs(ia)) r o l
write(stdout,'(/2x,a,a8,a,f10.3)') 'Atom: ',cryst%at(ia)%glab(),' BVS:',bvs(ia) a g
ncoord = cryst%coord_number(ia) n a
if (ncoord > 0) then B call new_bond_info(dinfo,ncoord) call cryst%valence_atom_info(ia,dinfo,bvs(ia),ncoord) call print_bond_info(cryst%at,cryst%spg,dinfo,stdout) endif enddo ! write(stdout,'(a,f10.3)')'GII=',cryst%gii_index(bvs) end program example6 * Kasunič, M., Meden, A., S.D. Škapin, Suvorov, D. and Golobič, A. (2011). Acta Cryst. B67, 455–460 program example6 use iso_fortran_env, only: stdout => OUTPUT_UNIT, ERROR_UNIT use crystal_phase use gen_frm use errormod use symmgrid implicit none type(crystal_phase_t) :: cryst type(error_type) :: err )
integer :: ia,ncoord 7 1
real, dimension(:), allocatable :: bvs 0 2
type(bond_info_t), dimension(:), allocatable :: dinfo t s ! u g u
call load_chemical_tables('../files/',err) A
h
if (err%signal) then t 0 2
write(ERROR_UNIT,'(a)')' Message: '//err%msg(); stop 1 - h endif t 5 1 (
! l o call crystal_file_import(cryst,'LaTi_true.cif',err=err) o h
if (err%signal) stop 2 c S
! g n i t u
! Bond valence parameters p m call cryst%load_bvparam() o C
c i
call cryst%print_bvparam(stdout) h p
! a r
! Initialization for bond valence g o l l
call cryst%make_symmetry_cell() a t
call cryst%allocate_grid(cutoff=maxval(cryst%bvpar(:,:)%rmax)) s y call cryst%fill_grid() r C
-
! a i ! Bond valence sum and additional info d n I
allocate(bvs(cryst%natoms())) ,
do ia=1,cryst%natoms() e ------r o call cryst%compute_bvs(ia,bvs(ia)) l Bond Valence Parameters and bond windows a write(stdout,'(/2x,a,a8,a,f10.3)') 'Atom: ',cryst%at(ia)%glab(),' BVS:',bvs(ia) g n
ncoord = cryst%coord_number(ia) Atom1 Atom2 Ro B rmin rmax a if (ncoord > 0) then ------B call new_bond_info(dinfo,ncoord) call cryst%valence_atom_info(ia,dinfo,bvs(ia),ncoord) O2- O2- 1.406 0.370 1.000 0.000 call print_bond_info(cryst%at,cryst%spg,dinfo,stdout) Al3+ O2- 1.651 0.370 1.318 2.270 endif Ti4+ O2- 1.815 0.370 1.704 2.304 enddo ! La3+ O2- 2.086 0.450 2.100 3.000 write (stdout,'(a,f10.3)')'GII=',cryst%gii_index(bvs) end program example6 program example6 use iso_fortran_env, only: stdout => OUTPUT_UNIT, ERROR_UNIT use crystal_phase use gen_frm use errormod use symmgrid implicit none type(crystal_phase_t) :: cryst type(error_type) :: err )
integer :: ia,ncoord 7 1
real, dimension(:), allocatable :: bvs 0 2
type(bond_info_t), dimension(:), allocatable :: dinfo t s ! u g u
call load_chemical_tables('../files/',err) A
h
if (err%signal) then t 0 2
write(ERROR_UNIT,'(a)')' Message: '//err%msg(); stop 1 - h endif t 5 1 (
! l o call crystal_file_import(cryst,'LaTi_true.cif',err=err) o h
if (err%signal) stop 2 c S ! g n i
! Bond valence parameters t u
call cryst%load_bvparam() p m
call cryst%print_bvparam(stdout) o C
! c i
! Initialization for bond valence h p a
call cryst%make_symmetry_cell() r g o l
call cryst%allocate_grid(cutoff=maxval(cryst%bvpar(:,:)%rmax)) l a call cryst%fill_grid() t s y ! r C
-
! Bond valence sum and additional info a allocate(bvs(cryst%natoms())) i d n I
do ia=1,cryst%natoms() , e r
call cryst%compute_bvs(ia,bvs(ia)) o l a
write(stdout,'(/2x,a,a8,a,f10.3)') 'Atom: ',cryst%at(ia)%glab(),' BVS:',bvs(ia) g n a
ncoord = cryst%coord_number(ia) B if (ncoord > 0) then call new_bond_info(dinfo,ncoord) call cryst%valence_atom_info(ia,dinfo,bvs(ia),ncoord) call print_bond_info(cryst%at,cryst%spg,dinfo,stdout) endif enddo ! write(stdout,'(a,f10.3)')'GII=',cryst%gii_index(bvs) end program example6 program example6 use iso_fortran_env, only: stdout => OUTPUT_UNIT, ERROR_UNIT use crystal_phase use gen_frm use errormod use symmgrid implicit none type(crystal_phase_t) :: cryst type(error_type) :: err )
integer :: ia,ncoord 7 1
real, dimension(:), allocatable :: bvs 0 2
type(bond_info_t), dimension(:), allocatable :: dinfo t s ! u g u
call load_chemical_tables('../files/',err) A
h
if (err%signal) then t 0 2
write(ERROR_UNIT,'(a)')' Message: '//err%msg(); stop 1 - h endif t 5 1 (
! l o call crystal_file_import(cryst,'LaTi_true.cif',err=err) o h
if (err%signal) stop 2 c S ! g n i
! Bond valence parameters t u
call cryst%load_bvparam() p m
call cryst%print_bvparam(stdout) o C
! c i
! Initialization for bond valence h p a
call cryst%make_symmetry_cell() r g o l
call cryst%allocate_grid(cutoff=maxval(cryst%bvpar(:,:)%rmax)) l a call cryst%fill_grid() t s y ! r C
-
! Bond valence sum and additional info a allocate(bvs(cryst%natoms())) i d n I
do ia=1,cryst%natoms() , e
call cryst%compute_bvs(ia,bvs(ia)) r o l
write(stdout,'(/2x,a,a8,a,f10.3)') 'Atom: ',cryst%at(ia)%glab(),' BVS:',bvs(ia) a g n
ncoord = cryst%coord_number(ia) a if (ncoord > 0) then B call new_bond_info(dinfo,ncoord) call cryst%valence_atom_info(ia,dinfo,bvs(ia),ncoord) call print_bond_info(cryst%at,cryst%spg,dinfo,stdout) endif enddo ! write(stdout,'(a,f10.3)')'GII=',cryst%gii_index(bvs) end program example6 ImposingImposing anti-bumpinganti-bumping restraintsrestraints ) 7 1 0 2
t s u g u A
h t 0 2 - h t 5 1 (
l o o h c S
g n i t u p m o C
c i h p a r g o l l a t s y r C
-
[Ag(pz)] Hpz = pyrazole a n i d n I
, e r o l a g
%sannel n a bump * * B nobump Ag1 N1 nobump Ag1 N2 bscale 0.9
Feng, Z.J., Jia, R.R., Dong, C., Cao, S.X. & Zhang, J.C. (2010). J.Appl. Cryst. 43, 179—180 MolecularMolecular GeometryGeometry RestraintsRestraints ) 7 1 0 2
t s u g u A
h t 0 2 - h t 5 1 (
l o o h c S
g n i t u p
= distance between two atoms A and B m o C
c i h p a r g o l = ideal distance l a t s y r C
-
a i d n
= permitted tolerance I
, e r o l a g n a = user supplied weight B
Non planar ring systems ) 7 1
Attention to non planar ring systems or unusual combinations 0 2
t s
of elements in functional groups u g u A
h t 0 2 - h t 5 1 (
l o o h c S
g n i t u p m o C
c i h p a r g o l l a t s y r C
-
a i d n I
, e r o l a g n a B
Structure Solution of Diltiazem Hydrochloride ) 7 1 0 2
t s
DS u g u A DOF = 6+3+7 h t 0 2 -
NO SOLUTION! h t 5 1 (
l o o h
Geometry optimization by DFT c S
(NWchem, B3LYP/6-31G*) g n i t u p m o C
c i h p a r g o l l a t s y r C
-
a i d n I
,
DS e r o l
DOF = 6+3+12 a g n a B Published
DSM
RMSD=0.054 Å AssessingAssessing thethe solutionsolution
Agreements factors ) 7 1 0
Visual match between calculated and observed profile 2
t s u g u
Reproducibility of solution A
h t 0 2 - h t 5 1 (
l o o h c S
g n i t u p m o C
c i h p a r g o l l a t s y r C
-
a i d n I
, e r o l a g n a B
AssessingAssessing thethe solutionsolution
Crystal packing ) 7 1 0 2
Check close contacts, void spaces, likely iterations t s u g u A
h t 0 2 -
Network of interactions: hydrogen bonds and short contacts h t 5 1 (
l o o h c S
g n i t u p m o C
c i h p a r g o l l a t s y r C
-
a i d n I
, e r o l a g n a B
Combined powder X-ray diffraction data and quantum-chemical calculations
Optimization of the molecular geometry to obtain accurate starting models ) 7 1 0 2
t s u g u A
h t
Restraints in the Rietveld refinement 0 2 - h t 5 1 (
l o o h c S
g n i
H atoms t u p m o C
c i h p a r g o l Solve ambiguities l a t s y (e.g., space groups, torsion angles) r C
-
a i d n I
, e r o l a g n
Two possible orientations of the pyridyl ring in the a Refinement of crystal structure B piroxicam molecule (Naelapää, K., van de Streek, J., Rantanen, J., and Bond, A. D. (2012), J.Pharm. Sci. 101, 4214–4219)
Validation of experimental crystal structures AssessingAssessing thethe solutionsolution withwith DFT-DDFT-D
Theoretical approach: plane wave (PW) density functional theory with ) 7 1 0
dispersion correction (DFT-D) 2
t s u g u A
h t 0 2 RMSD for non H-atoms above 0.25 Å could indicate incorrect experimental - h t 5 1 (
crystal structure * l o o h c S
g n i t u p m o C
c i h p a r
Ibuprofen g o l l a t s y
RMSD=0.023 Å r C
-
a i d n I
, e r o l a
Experimental crystal structure g n a B DFT-D3 with NWChem
*Jacco ven de Streek et al. Validation of molecular crystal structures Acta Cryst. (2010). B66, 544–558 DFT-D:DFT-D: HowtoHowto
Software Academic price (€) Link ) 7
VASP 4,000 www.vasp.at 1 0 2
t s
CASTEP 1,800 www.castep.org u g u A
h t
CRYSTAL 1,000 www.crystal.unito.it 0 2 - h t 5 1 (
Quantum ESPRESSO free www.quantum-espresso.org l o o h c S NWChem free www.nwchem-sw.org g n i t u
Abinit free www.abinit.org p m o C
c i h p a r g o l l a t s y r C
-
a i
Hardware: multi-core Linux Workstation d n I
, e r o l
Time: approx. 100 hrs for small molecules on single CPU a g n a B
Quantum espresso subroutine write_qe_file(filename,atom,cell,spg,structname) subroutine read_qe_file(filename,atom,cell,spg,errc) CRYSTAL ) 7 1
subroutine write_crystal_file(filename,atom,cell,spg,structname) 0 2
t s
subroutine read_crystal_file(filename,atom,cell,spg,errc) u g u A
h t 0
NWCHEM 2 - h t 5 1 (
subroutine write_nw_file(filename,atom,cell,spg,structname,nwtheory) l o o
subroutine OBConversionReadFile(filename,atom,bond,err) h c S
g n i t
Abinit u p m subroutine write_ab_file(filename,atom,cell,spg) o C
c i
subroutine OBConversionReadFile(filename,atom,bond,err) h p a r g o l l a
Gaussian, MOPAC t s y r C
subroutine OBConversionWriteFile(filename,atom,bond,cell,spg) -
a i
subroutine OBConversionReadFile(filename,atom,bond,err) d n I
, e r o l a g n a B General procedures: subroutine crystal_file_import(crystal,filename,[ftype],[radtype],[has_symmetry],err) subroutine crystal_file_export(crystal,filename,[ftype],[radtype],[wave],[comm])
Graphical User Interface for MOPAC2016 ) 7 1 0 2
t s u g u A
h t 0 2 - h t 5 1 (
l o o h c S
g n i t u p m o C
c i h p a r g o l l a t s y r C
-
a i d n I
, e r o l a g n a B
TheThe UseUse ofof OpenOpen BabelBabel ) 7 1 0 2
EXPO2014 Open Babel t s
obmodule.f90 u g u A
h t 0 2 - h t 5 1
C++ (
l
Fotran/C++ o o h c S
g n i t u p m o C
c i h p a r g o
Molecular-mechanics force fields (MMFF99 l l a t s y and UFF provided by Open Babel library) r C
-
a i d n I
, e r o l a g n a Able to process input and output files of the B most common quantum-chemistry packages
Download this lecture http://www.ba.ic.cnr.it/softwareic/expo/tutorials-and-lectures/ ) 7 1 0 2
t s u
Contact, software download and info g u A
h
http://www.ba.ic.cnr.it/softwareic/expo/ t 0 2 - h t 5 1 (
l o o h c S
g n i t u p m o C
c i h p
Acknowledgements a r g o l l a t s y r C
Colleagues of the research team -
a i d
A. Altomare, A. Moliterni, R. Rizzi, N. Corriero and A. Falcicchio n I
, e r o l a g n
Other collaborators a G. Cascarano, R. Mallamo, F. Ciriaco B