Commit c33300ff authored by Elisa Rebolini's avatar Elisa Rebolini
Browse files

Merge branch 'rebolini-master-patch-22496' into 'master'

Rebolini master patch 22496

See merge request !23
parents 90e96df8 ceb8a9c6
Pipeline #12477 passed with stages
in 6 minutes and 14 seconds
......@@ -52,27 +52,6 @@ make:linux_ifort:
- sci
- ubuntu
make:linux_gfortran_F2008:
stage: make
script:
- docker build --force-rm -t ci_crysfml_xenial_gfortran_f2008 -f ${CI_PROJECT_DIR}/BuildServer/Docker/Dockerfile_xenial_gfortran_setup_F2008 .
- docker build --force-rm --no-cache -t ci_crysfml_xenial_gfortran_build_f2008 -f ${CI_PROJECT_DIR}/BuildServer/Docker/Dockerfile_xenial_gfortran_build_F2008 --build-arg CI_COMMIT_SHORT_SHA=${CI_COMMIT_SHORT_SHA} --build-arg CI_COMMIT_REF_NAME=${CI_COMMIT_REF_NAME} .
- docker run -i -v${PWD}:/artifacts/ ci_crysfml_xenial_gfortran_build_f2008
tags:
- docker
- sci
- ubuntu
make:linux_ifort_F2008:
stage: make
script:
- docker build --force-rm -t ci_crysfml_xenial_ifort -f ${CI_PROJECT_DIR}/BuildServer/Docker/Dockerfile_xenial_ifort_setup .
- docker build --force-rm --no-cache -t ci_crysfml_xenial_ifort_build_f2008 -f ${CI_PROJECT_DIR}/BuildServer/Docker/Dockerfile_xenial_ifort_build_F2008 --build-arg CI_COMMIT_SHORT_SHA=${CI_COMMIT_SHORT_SHA} --build-arg CI_COMMIT_REF_NAME=${CI_COMMIT_REF_NAME} .
- docker run -i -v${PWD}:/artifacts/ -v/users/ci/projects/fullprof/intel:/opt/intel ci_crysfml_xenial_ifort_build_f2008
tags:
- docker
- sci
- ubuntu
#===============
......@@ -96,21 +75,6 @@ make:macos_ifort:
- sci
- osx-10.13
make:macos_gfortran_F2008:
stage: make
script:
- BuildServer/Unix/build_F2008.sh /usr/local/Cellar/gcc/9.3.0_1/bin/gfortran
tags:
- sci
- osx-10.13
make:macos_ifort_F2008:
stage: make
script:
- BuildServer/Unix/build_F2008.sh ifort
tags:
- sci
- osx-10.13
#===============
......@@ -140,26 +104,6 @@ make:windows_ifort:
- sci
- windows-10
make:windows_gfortran_F2008:
stage: make
script:
- set PATH=%PATH:C:\Program Files\Git\bin;=%
- set PATH=%PATH:c:\Projects\fullprof\mingw\bin;=%
- set PATH=c:\Projects\fullprof\MinGW64\bin;%PATH%
- call "BuildServer\\Windows\\build_F2008.bat" gfortran
tags:
- sci
- windows-10
make:windows_ifort_F2008:
stage: make
script:
- call "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Auxiliary\\Build\\vcvars64.bat"
- set LIB="C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2020.2.254\\windows\\compiler\\lib\\intel64_win";%LIB%
- call "BuildServer\\Windows\\build_F2008.bat" ifort
tags:
- sci
- windows-10
#=======================
#== MAKE RELEASE SECTION
......@@ -197,20 +141,7 @@ make_release:linux_gfortran:
- sci
- ubuntu
make_release:linux_F2008:
stage: make_release
script:
- docker build --force-rm -t ci_crysfml_xenial_ifort -f ${CI_PROJECT_DIR}/BuildServer/Docker/Dockerfile_xenial_ifort_setup .
- docker build --force-rm --no-cache -t ci_crysfml_xenial_release_build_f2008 -f ${CI_PROJECT_DIR}/BuildServer/Docker/Dockerfile_xenial_release_build_F2008 --build-arg CI_COMMIT_SHORT_SHA=${CI_COMMIT_SHORT_SHA} --build-arg CI_COMMIT_REF_NAME=${CI_COMMIT_REF_NAME} .
- docker run -i -v${PWD}:/artifacts/ -v/users/ci/projects/fullprof/intel:/opt/intel ci_crysfml_xenial_release_build_f2008
artifacts:
name: "CrysFML08 Linux"
paths:
- ${CI_PROJECT_DIR}/ifort/LibC08
tags:
- docker
- sci
- ubuntu
#===============
make_release:macos:
......@@ -230,17 +161,6 @@ make_release:macos:
- sci
- osx-10.13
make_release:macos_F2008:
stage: make_release
script:
- BuildServer/Unix/build_release_F2008.sh
artifacts:
name: "CrysFML08 macOS"
paths:
- ${CI_PROJECT_DIR}/ifort/LibC08
tags:
- sci
- osx-10.13
#===============
......@@ -264,16 +184,3 @@ make_release:windows:
- sci
- windows-10
make_release:windows_F2008:
stage: make_release
script:
- call "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Auxiliary\\Build\\vcvars64.bat"
- set LIB="C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2020.2.254\\windows\\compiler\\lib\\intel64_win";%LIB%
- call "BuildServer\\Windows\\build_release_F2008.bat"
artifacts:
name: "CrysFML08 Windows"
paths:
- "%CI_PROJECT_DIR%\\ifort\\LibC08"
tags:
- sci
- windows-10
\ No newline at end of file
!!-------------------------------------------------------
!!---- Crystallographic Fortran Modules Library (CrysFML)
!!-------------------------------------------------------
!!---- The CrysFML project is distributed under LGPL. In agreement with the
!!---- Intergovernmental Convention of the ILL, this software cannot be used
!!---- in military applications.
!!----
!!---- Copyright (C) 1999-2019 Institut Laue-Langevin (ILL), Grenoble, FRANCE
!!---- Universidad de La Laguna (ULL), Tenerife, SPAIN
!!---- Laboratoire Leon Brillouin(LLB), Saclay, FRANCE
!!----
!!---- Authors: Juan Rodriguez-Carvajal (ILL)
!!---- Javier Gonzalez-Platas (ULL)
!!----
!!---- Contributors: Laurent Chapon (ILL)
!!---- Marc Janoschek (Los Alamos National Laboratory, USA)
!!---- Oksana Zaharko (Paul Scherrer Institute, Switzerland)
!!---- Tierry Roisnel (CDIFX,Rennes France)
!!---- Eric Pellegrini (ILL)
!!---- Ross Angel (University of Pavia)
!!----
!!---- This library is free software; you can redistribute it and/or
!!---- modify it under the terms of the GNU Lesser General Public
!!---- License as published by the Free Software Foundation; either
!!---- version 3.0 of the License, or (at your option) any later version.
!!----
!!---- This library is distributed in the hope that it will be useful,
!!---- but WITHOUT ANY WARRANTY; without even the implied warranty of
!!---- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
!!---- Lesser General Public License for more details.
!!----
!!---- You should have received a copy of the GNU Lesser General Public
!!---- License along with this library; if not, see <http://www.gnu.org/licenses/>.
!!----
!!---- MODULE: CFML_Atoms
!!---- INFO: Subroutines related to Atoms definitions
!!----
!!---- HISTORY
!!---- Update: 06/03/2011
!!----
!!
Module CFML_Atoms
!---- Use Modules ----!
Use CFML_GlobalDeps
Use CFML_Maths, only: modulo_lat, equal_vector
Use CFML_Metrics, only: Cell_G_Type
Use CFML_Strings, only: u_case,l_case
Use CFML_gSpaceGroups, only: spg_type, apply_op, SuperSpaceGroup_Type
!---- Variables ----!
implicit none
private
!---- List of public procedures ----!
public :: Allocate_Atom_List, Extend_Atom_List, Init_Atom_Type, Read_Bin_Atom_List, &
Write_Bin_atom_List, Write_Atom_List, Allocate_Atoms_Cell
public :: Equiv_Atm, Wrt_Lab, Check_Symmetry_Constraints
!---- Parameters ----!
integer, public, parameter :: MAX_MOD=8 ! ??????
real(kind=cp), parameter :: R_ATOM=1.1_cp ! Average atomic radius
!---- Types ----!
!!----
!!---- TYPE :: ATM_TYPE
!!----
!!---- Simple Atom type containing the minimum set of model parameters
!!---- to describe the atom within a periodic crystal structure. The
!!---- simplest atom is characterized by its labels (Lab,ChemSymb,SfacSymb, ThType),
!!---- position X, isotropic displacement parameter U_iso, occupancy factor Occ,
!!---- magnetic moment, anisotropic displacement parameters U, charge, atomic number,
!!---- maximum module of magnetic moment and additional information.
!!----
Type, Public :: Atm_Type
character(len=20) :: Lab =" " ! Label (identifier) of the atom
character(len=2) :: ChemSymb=" " ! Chemical symbol
character(len=4) :: SfacSymb=" " ! Scattering Factor Symbol
integer :: Z = 0 ! Atomic number
integer :: Mult = 0 ! Multiplicity of the Wyckoff position
integer :: Charge = 0 ! Charge, ionic state
real(kind=cp), dimension(3) :: X = 0.0_cp ! Fractional Coordinates
real(kind=cp) :: U_iso = 0.0_cp ! Biso, Uiso or Ueq (if ThType ="iso" normally U_iso = Biso)
real(kind=cp) :: Occ = 1.0_cp ! Occupancy factor
character(len=4) :: UType ="B_IJ" ! Options: U_ij, B_ij, beta (U & beta are for anisotropic thermal factors)
character(len=3) :: ThType ="iso" ! Options: iso, ani
real(kind=cp), dimension(6) :: U = 0.0_cp ! Anisotropic thermal factors
logical :: Magnetic=.false. ! Flag indication if the atom is magnetic or not.
real(kind=cp) :: Mom = 0.0_cp ! Maximum Module of Magnetic moment
real(kind=cp), dimension(3) :: Moment = 0.0_cp ! Magnetic moment
integer, dimension(3) :: Ind_ff = 0 ! Pointer of form factors (1:Xray or species, 2:b, 3:Magff) to the number of the species in calculations
character(len=40) :: AtmInfo = " " ! Information string for different purposes
character(len=5) :: wyck = " " ! Wyckoff position label if known
real(kind=cp),dimension(5) :: VarF = 0.0_cp ! Free variables used for different purposes (1,2,3 reserved for occupations, not refinable)
logical :: active =.true. ! Control for different purposes
End Type Atm_Type
!!----
!!---- TYPE :: ATM_STD_TYPE
!!----
!!---- Simple Atom type + Standard deviation values
!!----
Type, Public, Extends(Atm_Type) :: Atm_Std_Type
real(kind=cp), dimension(3) :: X_Std = 0.0_cp ! standard deviations
real(kind=cp) :: Occ_Std = 0.0_cp
real(kind=cp) :: U_iso_Std = 0.0_cp
real(kind=cp), dimension(6) :: U_Std = 0.0_cp
real(kind=cp), dimension(3) :: Moment_std = 0.0_cp
End Type Atm_Std_Type
!!----
!!---- TYPE :: MATM_STD_TYPE
!!----
!!---- This type Modulated Atom type extends Atm_Std_Type by adding modulation
!!---- Cosine(c) and Sine amplitudes(s) to each model parameter characterizing
!!---- normal atoms. Up to max_mod harmonic numbers (Q_coeffs) are allowed
!!---- Still to implement special modulation functions (crenel-type)
!!---- Probably extending MAtm_Std_Type or its descendents
!!----
Type, Public, Extends(Atm_Std_Type) :: MAtm_Std_Type
integer :: n_oc = 0 ! Number of occupation amplitudes
integer :: n_bc = 0 ! Number of B_iso amplitudes
integer :: n_mc = 0 ! Number of moment amplitudes
integer :: n_dc = 0 ! Number of static displacement amplitudes
integer :: n_uc = 0 ! Number of thermal displacement amplitudes
integer, dimension(max_mod) :: poc_q = 0 ! Pointer to Q_coeffs of occupatiom amplitudes
integer, dimension(max_mod) :: pbc_q = 0 ! Pointer to Q_coeffs of B_iso amplitudes
integer, dimension(max_mod) :: pmc_q = 0 ! Pointer to Q_coeffs of moment amplitudes
integer, dimension(max_mod) :: pdc_q = 0 ! Pointer to Q_coeffs of displacement amplitudes
integer, dimension(max_mod) :: puc_q = 0 ! Pointer to Q_coeffs of thermal displacement amplitudes
real(kind=cp),dimension(2, max_mod) :: Ocs = 0.0_cp ! Ocos,Osin up to 8 (Oc, Os)
real(kind=cp),dimension(2, max_mod) :: Ocs_std= 0.0_cp !
real(kind=cp),dimension(2, max_mod) :: Bcs = 0.0_cp ! Bcos,Bsin up to 8 (Bc, Bs) B_Iso modulation amplitudes
real(kind=cp),dimension(2, max_mod) :: Bcs_std= 0.0_cp !
real(kind=cp),dimension(6, max_mod) :: Mcs = 0.0_cp ! Mcos,Msin up to 8 (Mcx Mcy Mcz , Msx Msy Msz)
real(kind=cp),dimension(6, max_mod) :: Mcs_std= 0.0_cp !
real(kind=cp),dimension(6, max_mod) :: Dcs = 0.0_cp ! Dcos,Dsin up to 8 (Dcx Dcy Dcz , Dsx Dsy Dsz)
real(kind=cp),dimension(6, max_mod) :: Dcs_std= 0.0_cp !
real(kind=cp),dimension(12,max_mod) :: Ucs = 0.0_cp ! Ucos,Usin up to 8 (Uc11 Uc22 Uc33, Uc12, Uc13, Uc23 , Us11 Us22 Us33, Us12, Us13, Us23)
real(kind=cp),dimension(12,max_mod) :: Ucs_std= 0.0_cp !
! The items below are not yet used and they are not in CIFs
real(kind=cp),dimension(:), allocatable :: Xs ! Position in superspace
real(kind=cp),dimension(:), allocatable :: Moms ! Moment in superspace
real(kind=cp),dimension(:,:), allocatable :: Us ! Thermal factors in superspace
End Type MAtm_Std_Type
!!----
!!---- TYPE :: ATM_REF_TYPE
!!----
!!---- Refinement Atom type: This type extends Atm_Std_Type with the numbers
!!---- of each model paramenter within the list of LSQ free parameters, as well
!!---- as the corresponding multipliers for constraints.
!!----
Type, Public, Extends(Atm_Std_Type) :: Atm_Ref_Type
integer, dimension(3) :: L_X =0 ! Code number of free parameters
integer :: L_Occ =0
integer :: L_U_iso =0
integer, dimension(3) :: L_moment =0
integer, dimension(6) :: L_U =0
real(kind=cp),dimension(3) :: M_X =0.0_cp ! Multipliers
real(kind=cp) :: M_Occ =0.0_cp
real(kind=cp) :: M_U_iso =0.0_cp
real(kind=cp),dimension(3) :: M_moment =0.0_cp
real(kind=cp),dimension(6) :: M_U =0.0_cp
End Type Atm_Ref_Type
!!----
!!---- TYPE :: MATM_REF_TYPE
!!----
!!---- Refinement Atom type: This type extends MAtm_Std_Type with the numbers
!!---- of each model paramenter within the list of LSQ free parameters, as well
!!---- as the corresponding multipliers for constraints.
!!----
Type, Public, Extends(MAtm_Std_Type) :: MAtm_Ref_Type
integer, dimension(3) :: L_X =0 ! Code Numbers of parameter
integer :: L_Occ =0
integer :: L_U_iso =0
integer, dimension(6) :: L_U =0
real(kind=cp),dimension(3) :: M_X =0.0_cp ! Multipliers of refinement
real(kind=cp) :: M_Occ =0.0_cp
real(kind=cp) :: M_U_iso =0.0_cp
real(kind=cp),dimension(6) :: M_U =0.0_cp
integer, dimension(2, max_mod) :: L_Ocs = 0 ! Code Numbers of parameter
integer, dimension(2, max_mod) :: L_Bcs = 0 !
integer, dimension(6, max_mod) :: L_Mcs = 0 !
integer, dimension(6, max_mod) :: L_Dcs = 0 !
integer, dimension(12,max_mod) :: L_Ucs = 0 !
real(kind=cp),dimension(2, max_mod) :: M_Ocs = 0.0_cp ! Multipliers
real(kind=cp),dimension(2, max_mod) :: M_Bcs = 0.0_cp ! Multipliers
real(kind=cp),dimension(6, max_mod) :: M_Mcs = 0.0_cp !
real(kind=cp),dimension(6, max_mod) :: M_Dcs = 0.0_cp !
real(kind=cp),dimension(12,max_mod) :: M_Ucs = 0.0_cp !
End Type MAtm_Ref_Type
!!----
!!---- TYPE ::ATM_CELL_TYPE
!!--..
!!---- This type is mostly used for distance-angle and Bond-valence calculations.
!!---- It holds the position and coordination of all the atoms in the conventional
!!---- unit cell as well as their distances to neighbours atoms.
!!----
!!---- 13/06/2019
!!
Type, Public :: Atm_Cell_Type
integer :: nat ! Total number of atoms
character(len=20), dimension(:), allocatable :: Lab ! Labels for atoms (dimension Nat)
real(kind=cp), dimension(:,:), allocatable :: xyz ! Fractional coordinates (3,nat)
real(kind=cp), dimension(:), allocatable :: charge
real(kind=cp), dimension(:), allocatable :: moment
real(kind=cp), dimension(:,:), allocatable :: var_free ! Free variables (10,nat)
integer, dimension(:), allocatable :: neighb ! Number of neighbours (nat)
integer, dimension(:,:), allocatable :: neighb_atom ! Ptr.->neighbour (# in list)(nat,idp)
real(kind=cp), dimension(:,:), allocatable :: distance ! Corresponding distances (nat,idp)
real(kind=cp), dimension(:,:,:), allocatable :: trans ! Lattice translations (3,nat,idp)
integer :: ndist ! Number of distinct distances
real(kind=cp), dimension(:), allocatable :: ddist ! List of distinct distances(nat*idp)
character (len=20), dimension(:), allocatable :: ddlab ! Labels of atoms at ddist (nat*idp)
End Type Atm_Cell_Type
!!---- Type, Public :: Atom_Equiv_Type
!!----
!!---- Updated: January 2014
!!
Type, Public :: Atom_Equiv_Type
integer :: mult=0
character(len=2) :: ChemSymb=" "
character(len=20),allocatable, dimension(:) :: Lab
real(kind=cp), allocatable, dimension(:,:) :: x
End Type Atom_Equiv_Type
!!---- Type, Public :: Atom_Equiv_List_Type
!!----
!!---- Updated: January 2014
!!
Type, Public :: Atom_Equiv_List_Type
integer :: nauas=0
type (Atom_Equiv_Type), allocatable, dimension(:) :: atm
End Type Atom_Equiv_List_Type
!!----
!!---- TYPE :: ALIST_TYPE
!!--..
!!
Type, Public :: AtList_Type
integer :: natoms=0 ! Number of atoms in the list
character(len=9) :: mcomp="Crystal" ! For magnetic moments and modulation functions Mcs and Dcs It may be also "Cartesian" or "Spherical"
logical :: symm_checked=.false.
logical, dimension(:), allocatable :: Active ! Flag for active or not
class(Atm_Type), dimension(:), allocatable :: Atom ! Atoms
End type AtList_Type
!---- Overload Zone ----!
Interface Extend_Atom_List
Module Procedure Extend_List !Creating a new AtList_Type with all atoms in unit cell
Module Procedure Set_Atom_Equiv_List !Creating a an Atom_Equiv_List_Type from AtList_Type in asymmetric unit
End Interface Extend_Atom_List
!---- Interface Zone ----!
Interface
Pure Module Function Equiv_Atm(Nam1,Nam2,NameAt) Result(Equiv_Atom)
!---- Arguments ----!
character (len=*), intent (in) :: nam1,nam2
character (len=*), intent (in) :: NameAt
logical :: equiv_atom
End Function Equiv_Atm
Pure Module Function Wrt_Lab(Nam1,Nam2) Result(Bilabel)
!---- Arguments ----!
character (len=*), intent (in) :: nam1,nam2
character (len=8) :: bilabel
End Function Wrt_Lab
Module Subroutine Init_Atom_Type(Atm,d)
!---- Arguments ----!
class(Atm_Type), intent(in out) :: Atm
integer, intent(in) :: d ! Number of k-vectors
End Subroutine Init_Atom_Type
Module Subroutine Allocate_Atoms_Cell(Nasu,Mul,Dmax,Ac)
!---- Arguments ----!
integer, intent(in) :: nasu
integer, intent(in) :: mul
real(kind=cp), intent(in) :: dmax
type (Atm_cell_type), intent(in out) :: Ac
End Subroutine Allocate_Atoms_Cell
Module Subroutine Allocate_Atom_List(N, A,Type_Atm, d)
!---- Arguments ----!
integer, intent(in) :: n ! Atoms in the List
type(Atlist_type), intent(in out) :: A ! Objet to be allocated
character(len=*), intent(in) :: Type_Atm !Atomic type: Atm, Atm_Std, MAtm_Std, Atm_Ref, MAtm_Ref
integer, intent(in) :: d ! Number of k-vectors
End Subroutine Allocate_Atom_List
Module Subroutine Check_Symmetry_Constraints(SpG,Atm)
class(SpG_Type), intent(in) :: SpG
type(AtList_Type), intent(in out) :: Atm
End Subroutine Check_Symmetry_Constraints
Module Subroutine Read_Bin_Atom_List(filename, A, Type_Atm)
!---- Arguments ----!
character(len=*), intent(in) :: filename
type(atlist_type), intent(in out) :: A
character(len=*), intent(in) :: Type_Atm
End Subroutine Read_Bin_Atom_List
Module Subroutine Write_Bin_Atom_List(filename, A)
!---- Arguments ----!
character(len=*), intent(in) :: filename
type(atlist_type), intent(in) :: A
End Subroutine Write_Bin_Atom_List
Module Subroutine Write_Atom_List(A, Iunit, SpG)
!---- Arguments ----!
type(atlist_type), intent(in) :: A ! Atom list object
integer, optional, intent(in) :: IUnit ! Logical unit
type(SuperSpaceGroup_type),optional, intent(in) :: SpG
End Subroutine Write_Atom_List
Module Subroutine Extend_List(A, B, Spg, Type_Atm,Conven)
!---- Arguments ----!
type(atlist_type), intent(in) :: A ! Atom list (asymmetric unit)
type(atlist_type), intent(in out) :: B ! Atom list into the unit cell
type(SpG_Type), intent(in) :: SpG ! SpaceGroup
character(len=*), intent(in) :: Type_Atm ! !Atomic type: Atm, Atm_Std, MAtm_Std, Atm_Ref, MAtm_Ref
logical, optional, intent(in) :: Conven ! If present and .true. using the whole conventional unit cell
End Subroutine Extend_List
Module Subroutine Set_Atom_Equiv_List(SpG,cell,A,Ate,lun)
type(SpG_Type), intent(in) :: SpG
type(Cell_G_Type), intent(in) :: Cell
type(Atlist_Type), intent(in) :: A
type(Atom_Equiv_List_Type), intent(out):: Ate
integer, optional, intent(in) :: lun
End Subroutine Set_Atom_Equiv_List
End Interface
End Module CFML_Atoms
!!----
!!----
!!----
SubModule (CFML_Atoms) Init_Allocating_Atoms
implicit none
Contains
!!----
!!---- INIT_ATOM_TYPE
!!---- Initialize Atom_Type
!!----
!!---- 12/06/2019
!!
Module Subroutine Init_Atom_Type(Atm, d)
!---- Arguments ----!
class(Atm_Type), intent(in out) :: Atm
integer, intent(in) :: d ! Number of k-vectors
Atm%Lab =" "
Atm%ChemSymb =" "
Atm%Z =0
Atm%Mult =0
Atm%Charge =0
Atm%X =0.0_cp
Atm%Occ =1.0_cp
!> Thermal model
Atm%UType ="B"
Atm%ThType ="iso"
Atm%U_iso = 0.0_cp
Atm%U = 0.0_cp
!> Magnetic
Atm%Magnetic =.false.
Atm%Moment = 0.0_cp
!> SFac
Atm%SfacSymb =" "
Atm%Ind_ff = 0
!> Info
Atm%AtmInfo = " "
Atm%wyck = " "
!> Free variables
Atm%VarF = 0.0
Atm%active = .true.
select type (Atm)
type is (atm_std_type)
Atm%X_Std = 0.0_cp
Atm%Occ_Std = 0.0_cp
Atm%U_iso_Std = 0.0_cp
Atm%U_Std = 0.0_cp
Atm%Moment_Std= 0.0_cp
type is (matm_std_type)
Atm%X_Std = 0.0_cp
Atm%Occ_Std = 0.0_cp
Atm%U_iso_Std = 0.0_cp
Atm%U_Std = 0.0_cp
Atm%Moment_Std= 0.0_cp
Atm%n_oc = 0
Atm%n_bc = 0
Atm%n_mc = 0
Atm%n_dc = 0
Atm%n_uc = 0
Atm%poc_q = 0
Atm%pbc_q = 0
Atm%pmc_q = 0
Atm%pdc_q = 0
Atm%puc_q = 0
Atm%Ocs = 0.0_cp
Atm%Ocs_std = 0.0_cp
Atm%Bcs = 0.0_cp
Atm%Bcs_std = 0.0_cp
Atm%Mcs = 0.0_cp
Atm%Mcs_std = 0.0_cp
Atm%Dcs = 0.0_cp
Atm%Dcs_std = 0.0_cp
Atm%Ucs = 0.0_cp
Atm%Ucs_std = 0.0_cp
if(allocated (Atm%Xs)) deallocate(Atm%Xs)
if(allocated (Atm%Us)) deallocate(Atm%Us)
if(allocated (Atm%Moms)) deallocate(Atm%Moms)
allocate(Atm%Xs(3+d),Atm%Us(3+d,3+d),Atm%Moms(3+d))
Atm%Xs=0.0; Atm%Us=0.0; Atm%Moms=0.0
type is (atm_ref_type)
Atm%X_Std = 0.0_cp
Atm%Occ_Std = 0.0_cp
Atm%U_iso_Std = 0.0_cp
Atm%U_Std = 0.0_cp
Atm%Moment_Std= 0.0_cp
Atm%L_X =0
Atm%L_Occ =0
Atm%L_U_iso =0
Atm%L_U =0
Atm%L_moment =0
Atm%M_X =0.0_cp
Atm%M_Occ =0.0_cp
Atm%M_U_iso =0.0_cp