) 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 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, , ABINIT, ORCA, Molpro, Q-Chem, , etc.

MoleculeMolecule editoreditor

A 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 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..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 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