CP2K 2.4 (Revision 12889)

qs_environment_types.f90

Go to the documentation of this file.
00001 !-----------------------------------------------------------------------------!
00002 !   CP2K: A general program to perform molecular dynamics simulations         !
00003 !   Copyright (C) 2000 - 2013  CP2K developers group                          !
00004 !-----------------------------------------------------------------------------!
00005 
00006 ! *****************************************************************************
00012 MODULE qs_environment_types
00013   USE admm_types,                      ONLY: admm_env_release,&
00014                                              admm_type
00015   USE atomic_kind_list_types,          ONLY: atomic_kind_list_type
00016   USE atomic_kind_types,               ONLY: atomic_kind_type
00017   USE atprop_types,                    ONLY: atprop_type
00018   USE cell_types,                      ONLY: cell_release,&
00019                                              cell_retain,&
00020                                              cell_type
00021   USE cp_blacs_env,                    ONLY: cp_blacs_env_create,&
00022                                              cp_blacs_env_release
00023   USE cp_control_types,                ONLY: dft_control_release,&
00024                                              dft_control_retain,&
00025                                              dft_control_type,&
00026                                              tddfpt_control_type
00027   USE cp_dbcsr_interface,              ONLY: cp_dbcsr_distribution_release,&
00028                                              cp_dbcsr_release_p
00029   USE cp_dbcsr_operations,             ONLY: cp_dbcsr_deallocate_matrix_set
00030   USE cp_dbcsr_types,                  ONLY: cp_dbcsr_p_type
00031   USE cp_ddapc_types,                  ONLY: cp_ddapc_ewald_release,&
00032                                              cp_ddapc_ewald_type,&
00033                                              cp_ddapc_release,&
00034                                              cp_ddapc_retain,&
00035                                              cp_ddapc_type
00036   USE cp_fm_pool_types,                ONLY: cp_fm_pool_type
00037   USE cp_fm_types,                     ONLY: cp_fm_get_info,&
00038                                              cp_fm_p_type,&
00039                                              cp_fm_release,&
00040                                              cp_fm_type
00041   USE cp_para_env,                     ONLY: cp_para_env_release,&
00042                                              cp_para_env_retain
00043   USE cp_para_types,                   ONLY: cp_blacs_env_type,&
00044                                              cp_para_env_type
00045   USE cp_result_types,                 ONLY: cp_result_create,&
00046                                              cp_result_release,&
00047                                              cp_result_type
00048   USE cp_subsys_types,                 ONLY: cp_subsys_create,&
00049                                              cp_subsys_get,&
00050                                              cp_subsys_release,&
00051                                              cp_subsys_retain,&
00052                                              cp_subsys_type
00053   USE dbcsr_types,                     ONLY: dbcsr_distribution_obj
00054   USE distribution_1d_types,           ONLY: distribution_1d_type
00055   USE distribution_2d_types,           ONLY: distribution_2d_release,&
00056                                              distribution_2d_retain,&
00057                                              distribution_2d_type
00058   USE dm_ls_scf_types,                 ONLY: ls_scf_env_type,&
00059                                              ls_scf_release
00060   USE ep_qs_types,                     ONLY: ep_qs_release,&
00061                                              ep_qs_retain,&
00062                                              ep_qs_type
00063   USE et_coupling_types,               ONLY: et_coupling_release,&
00064                                              et_coupling_type
00065   USE ewald_environment_types,         ONLY: ewald_env_release,&
00066                                              ewald_env_retain,&
00067                                              ewald_environment_type
00068   USE ewald_pw_types,                  ONLY: ewald_pw_release,&
00069                                              ewald_pw_retain,&
00070                                              ewald_pw_type
00071   USE f77_blas
00072   USE fist_nonbond_env_types,          ONLY: fist_nonbond_env_release,&
00073                                              fist_nonbond_env_type
00074   USE ga_environment_types,            ONLY: ga_env_release,&
00075                                              ga_env_retain,&
00076                                              ga_environment_type
00077   USE global_types,                    ONLY: global_environment_type
00078   USE harris_env_types,                ONLY: harris_env_release,&
00079                                              harris_env_type
00080   USE hartree_local_types,             ONLY: ecoul_1center_type,&
00081                                              get_hartree_local,&
00082                                              hartree_local_create,&
00083                                              hartree_local_release,&
00084                                              hartree_local_type,&
00085                                              set_hartree_local
00086   USE hfx_types,                       ONLY: hfx_release,&
00087                                              hfx_type
00088   USE input_section_types,             ONLY: section_vals_release,&
00089                                              section_vals_retain,&
00090                                              section_vals_type
00091   USE kg_environment_types,            ONLY: kg_env_release,&
00092                                              kg_environment_type
00093   USE kinds,                           ONLY: dp
00094   USE lri_environment_types,           ONLY: lri_density_release,&
00095                                              lri_density_type,&
00096                                              lri_env_release,&
00097                                              lri_environment_type
00098   USE mol_kind_new_list_types,         ONLY: mol_kind_new_list_type
00099   USE mol_new_list_types,              ONLY: mol_new_list_type
00100   USE molecule_kind_types,             ONLY: molecule_kind_type
00101   USE molecule_types_new,              ONLY: molecule_type
00102   USE mp2_types,                       ONLY: mp2_env_release,&
00103                                              mp2_type
00104   USE particle_list_types,             ONLY: particle_list_type
00105   USE particle_types,                  ONLY: particle_type
00106   USE pw_env_types,                    ONLY: pw_env_release,&
00107                                              pw_env_retain,&
00108                                              pw_env_type
00109   USE pw_types,                        ONLY: pw_p_type,&
00110                                              pw_release
00111   USE qmmm_types,                      ONLY: qmmm_env_qm_type
00112   USE qs_charges_types,                ONLY: qs_charges_release,&
00113                                              qs_charges_retain,&
00114                                              qs_charges_type
00115   USE qs_dftb_types,                   ONLY: qs_dftb_pairpot_release,&
00116                                              qs_dftb_pairpot_type
00117   USE qs_dispersion_types,             ONLY: qs_dispersion_type
00118   USE qs_energy_types,                 ONLY: deallocate_qs_energy,&
00119                                              qs_energy_type
00120   USE qs_force_types,                  ONLY: deallocate_qs_force,&
00121                                              qs_force_type
00122   USE qs_ks_qmmm_types,                ONLY: qs_ks_qmmm_env_type,&
00123                                              qs_ks_qmmm_release,&
00124                                              qs_ks_qmmm_retain
00125   USE qs_ks_types,                     ONLY: qs_ks_env_type,&
00126                                              qs_ks_release,&
00127                                              qs_ks_retain
00128   USE qs_linres_types,                 ONLY: linres_control_release,&
00129                                              linres_control_retain,&
00130                                              linres_control_type
00131   USE qs_local_rho_types,              ONLY: get_local_rho,&
00132                                              local_rho_set_create,&
00133                                              local_rho_set_release,&
00134                                              local_rho_type,&
00135                                              rhoz_type,&
00136                                              set_local_rho
00137   USE qs_matrix_pools,                 ONLY: mpools_get,&
00138                                              mpools_release,&
00139                                              mpools_retain,&
00140                                              qs_matrix_pools_type
00141   USE qs_mo_methods,                   ONLY: make_basis_cholesky,&
00142                                              make_basis_lowdin,&
00143                                              make_basis_simple,&
00144                                              make_basis_sm
00145   USE qs_mo_types,                     ONLY: deallocate_mo_set,&
00146                                              mo_set_p_type
00147   USE qs_neighbor_list_types,          ONLY: deallocate_neighbor_list_set,&
00148                                              neighbor_list_set_p_type
00149   USE qs_oce_types,                    ONLY: deallocate_oce_set,&
00150                                              oce_matrix_type
00151   USE qs_period_efield_types,          ONLY: efield_berry_release,&
00152                                              efield_berry_type
00153   USE qs_rho0_types,                   ONLY: rho0_atom_type,&
00154                                              rho0_mpole_type
00155   USE qs_rho_atom_types,               ONLY: rho_atom_type
00156   USE qs_rho_types,                    ONLY: qs_rho_release,&
00157                                              qs_rho_retain,&
00158                                              qs_rho_type
00159   USE qs_scf_types,                    ONLY: ot_method_nr,&
00160                                              qs_scf_env_type,&
00161                                              scf_env_release,&
00162                                              scf_env_retain
00163   USE qs_wf_history_types,             ONLY: qs_wf_history_type,&
00164                                              wfi_release,&
00165                                              wfi_retain
00166   USE rel_control_types,               ONLY: rel_c_release,&
00167                                              rel_c_retain,&
00168                                              rel_control_type
00169   USE ri_environment_types,            ONLY: ri_env_release,&
00170                                              ri_environment_type
00171   USE rt_propagation_types,            ONLY: rt_prop_release,&
00172                                              rt_prop_type
00173   USE scf_control_types,               ONLY: scf_c_release,&
00174                                              scf_c_retain,&
00175                                              scf_control_type
00176   USE scp_environment_types,           ONLY: scp_env_release,&
00177                                              scp_env_retain,&
00178                                              scp_environment_type
00179   USE semi_empirical_mpole_types,      ONLY: nddo_mpole_release,&
00180                                              nddo_mpole_type
00181   USE semi_empirical_store_int_types,  ONLY: semi_empirical_si_release,&
00182                                              semi_empirical_si_type
00183   USE semi_empirical_types,            ONLY: se_taper_release,&
00184                                              se_taper_type
00185   USE task_list_types,                 ONLY: deallocate_task_list,&
00186                                              task_list_type
00187   USE timings,                         ONLY: timeset,&
00188                                              timestop
00189   USE virial_types,                    ONLY: virial_release,&
00190                                              virial_retain,&
00191                                              virial_type
00192   USE wannier_states_types,            ONLY: wannier_centres_type
00193   USE xas_env_types,                   ONLY: xas_env_release,&
00194                                              xas_env_retain,&
00195                                              xas_environment_type
00196 #include "cp_common_uses.h"
00197 
00198   IMPLICIT NONE
00199 
00200   PRIVATE
00201 
00202   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_environment_types'
00203   INTEGER, PRIVATE, SAVE :: last_qs_env_id_nr=0
00204 
00205 ! *** Public data types ***
00206 
00207   PUBLIC :: qs_environment_p_type,&
00208             qs_environment_type
00209 
00210 ! *** Public subroutines ***
00211 
00212   PUBLIC :: get_qs_env,&
00213             init_qs_env,&
00214             qs_env_create,&
00215             qs_env_release,&
00216             qs_env_reorthogonalize_vectors,&
00217             qs_env_retain,&
00218             set_qs_env
00219 
00220 ! *****************************************************************************
00322   TYPE qs_environment_type
00323     INTEGER :: id_nr, ref_count
00324     LOGICAL :: use_ref_cell
00325     LOGICAL :: qmmm, qmmm_periodic
00326     LOGICAL :: requires_mo_derivs
00327     LOGICAL :: requires_matrix_vxc
00328     LOGICAL :: has_unit_metric
00329     LOGICAL :: use_harris
00330     LOGICAL :: run_rtp
00331     LOGICAL :: calc_image_preconditioner
00332     INTEGER :: nelectron_total
00333     INTEGER :: nelectron_spin(2)
00334     REAL(KIND=dp)                                         :: sim_time
00335     REAL(KIND=dp) :: start_time, target_time
00336     REAL(KIND=dp),DIMENSION(:,:),POINTER                  :: image_matrix
00337     REAL(KIND=dp),DIMENSION(:),POINTER                    :: image_coeff
00338     INTEGER,DIMENSION(:),POINTER                          :: ipiv
00339     INTEGER                                               :: sim_step
00340     TYPE(ga_environment_type), POINTER                    :: ga_env
00341     TYPE(ls_scf_env_type), POINTER                        :: ls_scf_env
00342     TYPE(cell_type), POINTER                              :: cell, super_cell
00343     TYPE(cell_type), POINTER                              :: cell_ref
00344     TYPE(dft_control_type), POINTER                       :: dft_control
00345     TYPE(mo_set_p_type), DIMENSION(:), POINTER            :: mos, mos_aux_fit
00346     TYPE(cp_fm_p_type), DIMENSION(:), POINTER             :: mo_derivs_aux_fit
00347     TYPE(cp_fm_p_type), DIMENSION(:), POINTER             :: mo_loc_history
00348     TYPE(cp_dbcsr_p_type), DIMENSION(:), POINTER          :: mo_derivs
00349     INTEGER                                               :: neighbor_list_id
00350     TYPE(neighbor_list_set_p_type), DIMENSION(:), POINTER :: sab_orb,sac_ae,
00351                                                              sac_ppl,sap_ppnl,
00352                                                              sap_oce,sab_se,sab_vdw,sab_cn,
00353                                                              sab_tbe,sab_core,sab_all,sab_scp,
00354                                                              sab_aux_fit, sab_aux_fit_vs_orb,
00355                                                              sab_aux_fit_asymm, sab_lrc
00356     TYPE(qs_energy_type), POINTER                         :: energy
00357     TYPE(qs_force_type), DIMENSION(:), POINTER            :: force
00358     TYPE(harris_env_type), POINTER                        :: harris_env
00359     TYPE(cp_dbcsr_p_type), DIMENSION(:), POINTER          :: matrix_h,
00360                                                              matrix_ks,
00361                                                              matrix_vxc,
00362                                                              matrix_s,
00363                                                              kinetic,
00364                                                              matrix_w,
00365                                                              gamma_matrix,
00366                                                              matrix_s_aux_fit,
00367                                                              matrix_s_aux_fit_vs_orb,
00368                                                              matrix_ks_aux_fit
00369     TYPE(qs_rho_type), POINTER                            :: rho,
00370                                                              rho_buffer,
00371                                                              rho_xc,
00372                                                              rho_aux_fit
00373     TYPE(scf_control_type), POINTER                       :: scf_control
00374     TYPE(rel_control_type), POINTER                       :: rel_control
00375     TYPE(scp_environment_type), POINTER                   :: scp_env
00376     TYPE(pw_env_type), POINTER                            :: pw_env
00377     TYPE(cp_para_env_type), POINTER                       :: para_env
00378     TYPE(cp_blacs_env_type), POINTER                      :: blacs_env
00379     TYPE(pw_p_type), POINTER                              :: rho_core
00380     TYPE(pw_p_type), POINTER                              :: vppl
00381     TYPE(pw_p_type), POINTER                              :: rho_nlcc
00382     TYPE(pw_p_type), POINTER                              :: rho_nlcc_g
00383     TYPE(pw_p_type), POINTER                              :: vee
00384     TYPE(qs_charges_type), POINTER                        :: qs_charges
00385     TYPE(qs_ks_env_type), POINTER                         :: ks_env
00386     TYPE(qs_ks_qmmm_env_type), POINTER                    :: ks_qmmm_env
00387     TYPE(qmmm_env_qm_type),POINTER                        :: qmmm_env_qm
00388     TYPE(qs_wf_history_type), POINTER                     :: wf_history
00389     TYPE(qs_scf_env_type), POINTER                        :: scf_env
00390     TYPE(qs_matrix_pools_type), POINTER                   :: mpools
00391     TYPE(qs_matrix_pools_type), POINTER                   :: mpools_aux_fit
00392     TYPE(distribution_2d_type), POINTER                   :: distribution_2d
00393     TYPE(dbcsr_distribution_obj), POINTER                 :: dbcsr_dist
00394     TYPE(cp_subsys_type), POINTER                         :: subsys
00395     TYPE(oce_matrix_type), POINTER                        :: oce
00396     TYPE(local_rho_type), POINTER                         :: local_rho_set
00397     TYPE(hartree_local_type),  POINTER                    :: hartree_local
00398     TYPE(section_vals_type), POINTER                      :: input
00399     TYPE(linres_control_type), POINTER                    :: linres_control
00400     TYPE(xas_environment_type), POINTER                   :: xas_env
00401     TYPE(cp_ddapc_type), POINTER                          :: cp_ddapc_env
00402     TYPE(cp_ddapc_ewald_type), POINTER                    :: cp_ddapc_ewald
00403     TYPE(virial_type), POINTER                            :: virial
00404     REAL(KIND = dp), DIMENSION(:,:), POINTER              :: outer_scf_history
00405     INTEGER                                               :: outer_scf_ihistory
00406     TYPE(ep_qs_type), POINTER                             :: ep_qs_env
00407     TYPE(hfx_type),DIMENSION(:,:), POINTER                :: x_data
00408     TYPE(et_coupling_type),POINTER                        :: et_coupling
00409     TYPE(qs_dftb_pairpot_type), DIMENSION(:,:), POINTER   :: dftb_potential
00410     TYPE(cp_result_type) ,POINTER                         :: results
00411     TYPE(task_list_type), POINTER                         :: task_list
00412     TYPE(task_list_type), POINTER                         :: task_list_aux_fit
00413     TYPE(task_list_type), POINTER                         :: task_list_soft
00414     TYPE(admm_type), POINTER                              :: admm_env
00415     ! LRI
00416     TYPE(lri_environment_type), POINTER                   :: lri_env
00417     TYPE(lri_density_type), POINTER                       :: lri_density
00418     ! HFX RI
00419     TYPE(ri_environment_type), POINTER                    :: hfx_ri_env
00420     ! Empirical dispersion
00421     TYPE(qs_dispersion_type), POINTER                     :: dispersion_env
00422     ! Semi-empirical and DFTB types
00423     TYPE(ewald_environment_type),POINTER                  :: ewald_env
00424     TYPE(ewald_pw_type),POINTER                           :: ewald_pw
00425     ! Semi-empirical types
00426     TYPE(se_taper_type), POINTER                          :: se_taper
00427     TYPE(semi_empirical_si_type),POINTER                  :: se_store_int_env
00428     TYPE(nddo_mpole_type), POINTER                        :: se_nddo_mpole
00429     TYPE(fist_nonbond_env_type), POINTER                  :: se_nonbond_env
00430     TYPE(rt_prop_type),POINTER                            :: rtp
00431     TYPE(efield_berry_type),POINTER                       :: efield
00432     ! a history for the broyden ot
00433     REAL(KIND = dp)                                       :: broyden_adaptive_sigma
00434     TYPE(mp2_type), POINTER                               :: mp2_env
00435     TYPE(kg_environment_type), POINTER                    :: kg_env
00436     TYPE(wannier_centres_type), POINTER,DIMENSION(:)      :: WannierCentres=>NULL()
00437     ! atomic properties
00438     TYPE(atprop_type),POINTER                             :: atprop
00439   END TYPE qs_environment_type
00440 
00441 ! *****************************************************************************
00448   TYPE qs_environment_p_type
00449      TYPE(qs_environment_type), POINTER :: qs_env
00450   END TYPE qs_environment_p_type
00451 
00452 CONTAINS
00453 
00454 ! *****************************************************************************
00460   SUBROUTINE get_qs_env(qs_env,atomic_kind_set,cell,super_cell,cell_ref,use_ref_cell,&
00461        dft_control,mos,mos_aux_fit,sab_orb,sab_aux_fit,sab_aux_fit_asymm, sab_aux_fit_vs_orb,&
00462        sab_all,qmmm,qmmm_periodic,sac_ae,sac_ppl,sap_ppnl,sab_vdw,sab_cn,sab_scp,sap_oce,sab_lrc,&
00463        sab_se,sab_tbe,sab_core,particle_set,energy,force,harris_env,matrix_h,matrix_ks,matrix_vxc,run_rtp,rtp,&
00464        matrix_ks_aux_fit,matrix_s,matrix_s_aux_fit,matrix_s_aux_fit_vs_orb,matrix_w,&
00465        gamma_matrix, rho, rho_aux_fit,rho_buffer, rho_xc, pw_env, ewald_env, ewald_pw, &
00466        mpools,mpools_aux_fit,input, para_env, blacs_env, scf_control,rel_control,kinetic,qs_charges,&
00467        vppl, rho_core, rho_nlcc, rho_nlcc_g, ks_env, ks_qmmm_env, wf_history,scf_env,use_harris, id_nr, local_particles,&
00468        local_molecules, distribution_2d, dbcsr_dist, molecule_kind_set,molecule_set,subsys,oce,rho_atom_set,&
00469        task_list,task_list_aux_fit,task_list_soft,rho0_atom_set,rho0_mpole,rhoz_set,ecoul_1c,&
00470        rho0_s_rs,rho0_s_gs,has_unit_metric,requires_mo_derivs,mo_derivs,&
00471        mo_derivs_aux_fit, mo_loc_history, tddfpt_control,nkind,natom,nelectron_total,nelectron_spin,efield,&
00472        neighbor_list_id,linres_control,xas_env,virial,cp_ddapc_env,cp_ddapc_ewald,&
00473        outer_scf_history,outer_scf_ihistory,ep_qs_env,x_data,et_coupling,dftb_potential,results,&
00474        scp_env,se_taper,se_store_int_env,se_nddo_mpole,se_nonbond_env, admm_env, &
00475        lri_env,lri_density,hfx_ri_env,dispersion_env, vee,mp2_env,kg_env,WannierCentres,ga_env,atprop,ls_scf_env,error)
00476     TYPE(qs_environment_type), POINTER       :: qs_env
00477     TYPE(atomic_kind_type), DIMENSION(:), 
00478       OPTIONAL, POINTER                      :: atomic_kind_set
00479     TYPE(cell_type), OPTIONAL, POINTER       :: cell, super_cell, cell_ref
00480     LOGICAL, OPTIONAL                        :: use_ref_cell
00481     TYPE(dft_control_type), OPTIONAL, 
00482       POINTER                                :: dft_control
00483     TYPE(mo_set_p_type), DIMENSION(:), 
00484       OPTIONAL, POINTER                      :: mos, mos_aux_fit
00485     TYPE(neighbor_list_set_p_type), 
00486       DIMENSION(:), OPTIONAL, POINTER        :: sab_orb, sab_aux_fit, 
00487                                                 sab_aux_fit_asymm, 
00488                                                 sab_aux_fit_vs_orb, sab_all
00489     LOGICAL, OPTIONAL                        :: qmmm, qmmm_periodic
00490     TYPE(neighbor_list_set_p_type), DIMENSION(:), OPTIONAL, POINTER :: 
00491       sac_ae, sac_ppl, sap_ppnl, sab_vdw, sab_cn, sab_scp, sap_oce, sab_lrc, 
00492       sab_se, sab_tbe, sab_core
00493     TYPE(particle_type), DIMENSION(:), 
00494       OPTIONAL, POINTER                      :: particle_set
00495     TYPE(qs_energy_type), OPTIONAL, POINTER  :: energy
00496     TYPE(qs_force_type), DIMENSION(:), 
00497       OPTIONAL, POINTER                      :: force
00498     TYPE(harris_env_type), OPTIONAL, POINTER :: harris_env
00499     TYPE(cp_dbcsr_p_type), DIMENSION(:), 
00500       OPTIONAL, POINTER                      :: matrix_h, matrix_ks, 
00501                                                 matrix_vxc
00502     LOGICAL, OPTIONAL                        :: run_rtp
00503     TYPE(rt_prop_type), OPTIONAL, POINTER    :: rtp
00504     TYPE(cp_dbcsr_p_type), DIMENSION(:), OPTIONAL, POINTER :: 
00505       matrix_ks_aux_fit, matrix_s, matrix_s_aux_fit, matrix_s_aux_fit_vs_orb, 
00506       matrix_w, gamma_matrix
00507     TYPE(qs_rho_type), OPTIONAL, POINTER     :: rho, rho_aux_fit, rho_buffer, 
00508                                                 rho_xc
00509     TYPE(pw_env_type), OPTIONAL, POINTER     :: pw_env
00510     TYPE(ewald_environment_type), OPTIONAL, 
00511       POINTER                                :: ewald_env
00512     TYPE(ewald_pw_type), OPTIONAL, POINTER   :: ewald_pw
00513     TYPE(qs_matrix_pools_type), OPTIONAL, 
00514       POINTER                                :: mpools, mpools_aux_fit
00515     TYPE(section_vals_type), OPTIONAL, 
00516       POINTER                                :: input
00517     TYPE(cp_para_env_type), OPTIONAL, 
00518       POINTER                                :: para_env
00519     TYPE(cp_blacs_env_type), OPTIONAL, 
00520       POINTER                                :: blacs_env
00521     TYPE(scf_control_type), OPTIONAL, 
00522       POINTER                                :: scf_control
00523     TYPE(rel_control_type), OPTIONAL, 
00524       POINTER                                :: rel_control
00525     TYPE(cp_dbcsr_p_type), DIMENSION(:), 
00526       OPTIONAL, POINTER                      :: kinetic
00527     TYPE(qs_charges_type), OPTIONAL, POINTER :: qs_charges
00528     TYPE(pw_p_type), OPTIONAL, POINTER       :: vppl, rho_core, rho_nlcc, 
00529                                                 rho_nlcc_g
00530     TYPE(qs_ks_env_type), OPTIONAL, POINTER  :: ks_env
00531     TYPE(qs_ks_qmmm_env_type), OPTIONAL, 
00532       POINTER                                :: ks_qmmm_env
00533     TYPE(qs_wf_history_type), OPTIONAL, 
00534       POINTER                                :: wf_history
00535     TYPE(qs_scf_env_type), OPTIONAL, POINTER :: scf_env
00536     LOGICAL, OPTIONAL                        :: use_harris
00537     INTEGER, INTENT(out), OPTIONAL           :: id_nr
00538     TYPE(distribution_1d_type), OPTIONAL, 
00539       POINTER                                :: local_particles, 
00540                                                 local_molecules
00541     TYPE(distribution_2d_type), OPTIONAL, 
00542       POINTER                                :: distribution_2d
00543     TYPE(dbcsr_distribution_obj), OPTIONAL, 
00544       POINTER                                :: dbcsr_dist
00545     TYPE(molecule_kind_type), DIMENSION(:), 
00546       OPTIONAL, POINTER                      :: molecule_kind_set
00547     TYPE(molecule_type), DIMENSION(:), 
00548       OPTIONAL, POINTER                      :: molecule_set
00549     TYPE(cp_subsys_type), OPTIONAL, POINTER  :: subsys
00550     TYPE(oce_matrix_type), OPTIONAL, POINTER :: oce
00551     TYPE(rho_atom_type), DIMENSION(:), 
00552       OPTIONAL, POINTER                      :: rho_atom_set
00553     TYPE(task_list_type), OPTIONAL, POINTER  :: task_list, task_list_aux_fit, 
00554                                                 task_list_soft
00555     TYPE(rho0_atom_type), DIMENSION(:), 
00556       OPTIONAL, POINTER                      :: rho0_atom_set
00557     TYPE(rho0_mpole_type), OPTIONAL, POINTER :: rho0_mpole
00558     TYPE(rhoz_type), DIMENSION(:), 
00559       OPTIONAL, POINTER                      :: rhoz_set
00560     TYPE(ecoul_1center_type), DIMENSION(:), 
00561       OPTIONAL, POINTER                      :: ecoul_1c
00562     TYPE(pw_p_type), OPTIONAL, POINTER       :: rho0_s_rs, rho0_s_gs
00563     LOGICAL, OPTIONAL                        :: has_unit_metric, 
00564                                                 requires_mo_derivs
00565     TYPE(cp_dbcsr_p_type), DIMENSION(:), 
00566       OPTIONAL, POINTER                      :: mo_derivs
00567     TYPE(cp_fm_p_type), DIMENSION(:), 
00568       OPTIONAL, POINTER                      :: mo_derivs_aux_fit, 
00569                                                 mo_loc_history
00570     TYPE(tddfpt_control_type), OPTIONAL, 
00571       POINTER                                :: tddfpt_control
00572     INTEGER, OPTIONAL                        :: nkind, natom, nelectron_total
00573     INTEGER, DIMENSION(2), OPTIONAL          :: nelectron_spin
00574     TYPE(efield_berry_type), OPTIONAL, 
00575       POINTER                                :: efield
00576     INTEGER, OPTIONAL                        :: neighbor_list_id
00577     TYPE(linres_control_type), OPTIONAL, 
00578       POINTER                                :: linres_control
00579     TYPE(xas_environment_type), OPTIONAL, 
00580       POINTER                                :: xas_env
00581     TYPE(virial_type), OPTIONAL, POINTER     :: virial
00582     TYPE(cp_ddapc_type), OPTIONAL, POINTER   :: cp_ddapc_env
00583     TYPE(cp_ddapc_ewald_type), OPTIONAL, 
00584       POINTER                                :: cp_ddapc_ewald
00585     REAL(KIND=dp), DIMENSION(:, :), 
00586       OPTIONAL, POINTER                      :: outer_scf_history
00587     INTEGER, INTENT(out), OPTIONAL           :: outer_scf_ihistory
00588     TYPE(ep_qs_type), OPTIONAL, POINTER      :: ep_qs_env
00589     TYPE(hfx_type), DIMENSION(:, :), 
00590       OPTIONAL, POINTER                      :: x_data
00591     TYPE(et_coupling_type), OPTIONAL, 
00592       POINTER                                :: et_coupling
00593     TYPE(qs_dftb_pairpot_type), 
00594       DIMENSION(:, :), OPTIONAL, POINTER     :: dftb_potential
00595     TYPE(cp_result_type), OPTIONAL, POINTER  :: results
00596     TYPE(scp_environment_type), OPTIONAL, 
00597       POINTER                                :: scp_env
00598     TYPE(se_taper_type), OPTIONAL, POINTER   :: se_taper
00599     TYPE(semi_empirical_si_type), OPTIONAL, 
00600       POINTER                                :: se_store_int_env
00601     TYPE(nddo_mpole_type), OPTIONAL, POINTER :: se_nddo_mpole
00602     TYPE(fist_nonbond_env_type), OPTIONAL, 
00603       POINTER                                :: se_nonbond_env
00604     TYPE(admm_type), OPTIONAL, POINTER       :: admm_env
00605     TYPE(lri_environment_type), OPTIONAL, 
00606       POINTER                                :: lri_env
00607     TYPE(lri_density_type), OPTIONAL, 
00608       POINTER                                :: lri_density
00609     TYPE(ri_environment_type), OPTIONAL, 
00610       POINTER                                :: hfx_ri_env
00611     TYPE(qs_dispersion_type), OPTIONAL, 
00612       POINTER                                :: dispersion_env
00613     TYPE(pw_p_type), OPTIONAL, POINTER       :: vee
00614     TYPE(mp2_type), OPTIONAL, POINTER        :: mp2_env
00615     TYPE(kg_environment_type), OPTIONAL, 
00616       POINTER                                :: kg_env
00617     TYPE(wannier_centres_type), 
00618       DIMENSION(:), OPTIONAL, POINTER        :: WannierCentres
00619     TYPE(ga_environment_type), OPTIONAL, 
00620       POINTER                                :: ga_env
00621     TYPE(atprop_type), OPTIONAL, POINTER     :: atprop
00622     TYPE(ls_scf_env_type), OPTIONAL, POINTER :: ls_scf_env
00623     TYPE(cp_error_type), INTENT(INOUT)       :: error
00624 
00625     CHARACTER(len=*), PARAMETER :: routineN = 'get_qs_env', 
00626       routineP = moduleN//':'//routineN
00627 
00628     LOGICAL                                  :: failure
00629     TYPE(atomic_kind_list_type), POINTER     :: atomic_kinds
00630     TYPE(mol_kind_new_list_type), POINTER    :: molecule_kinds_new
00631     TYPE(mol_new_list_type), POINTER         :: molecules_new
00632     TYPE(particle_list_type), POINTER        :: particles
00633     TYPE(rho0_mpole_type), POINTER           :: rho0_m
00634 
00635     failure=.FALSE.
00636     NULLIFY(atomic_kinds, particles, molecules_new,&
00637          molecule_kinds_new)
00638     CPPrecondition(qs_env%ref_count>0,cp_failure_level,routineP,error,failure)
00639     CPPrecondition(ASSOCIATED(qs_env%subsys),cp_failure_level,routineP,error,failure)
00640     IF (PRESENT(nelectron_total)) nelectron_total=qs_env%nelectron_total
00641     IF (PRESENT(nelectron_spin))  nelectron_spin=qs_env%nelectron_spin
00642     IF (PRESENT(outer_scf_history)) outer_scf_history=>qs_env%outer_scf_history
00643     IF (PRESENT(outer_scf_ihistory)) outer_scf_ihistory=qs_env%outer_scf_ihistory
00644     IF (PRESENT(ga_env)) ga_env => qs_env%ga_env
00645     IF (PRESENT(cell)) cell => qs_env%cell
00646     IF (PRESENT(mp2_env)) mp2_env => qs_env%mp2_env
00647     IF (PRESENT(kg_env)) kg_env => qs_env%kg_env   
00648     IF (PRESENT(super_cell)) super_cell => qs_env%super_cell
00649     IF (PRESENT(cell_ref)) cell_ref => qs_env%cell_ref
00650     IF (PRESENT(use_ref_cell)) use_ref_cell = qs_env%use_ref_cell
00651     IF (PRESENT(qmmm)) qmmm = qs_env%qmmm
00652     IF (PRESENT(qmmm_periodic)) qmmm_periodic = qs_env%qmmm_periodic
00653     IF (PRESENT(dft_control)) dft_control => qs_env%dft_control
00654     IF (PRESENT(mos)) mos => qs_env%mos
00655     IF (PRESENT(mos_aux_fit)) mos_aux_fit => qs_env%mos_aux_fit
00656     IF (PRESENT(neighbor_list_id)) neighbor_list_id=qs_env%neighbor_list_id
00657     IF (PRESENT(sab_orb)) sab_orb => qs_env%sab_orb
00658     IF (PRESENT(sab_aux_fit)) sab_aux_fit => qs_env%sab_aux_fit
00659     IF (PRESENT(sab_aux_fit_asymm)) sab_aux_fit_asymm => qs_env%sab_aux_fit_asymm
00660     IF (PRESENT(sab_aux_fit_vs_orb)) sab_aux_fit_vs_orb => qs_env%sab_aux_fit_vs_orb
00661     IF (PRESENT(sab_all)) sab_all => qs_env%sab_all
00662     IF (PRESENT(sab_scp)) sab_scp => qs_env%sab_scp
00663     IF (PRESENT(sab_vdw)) sab_vdw => qs_env%sab_vdw
00664     IF (PRESENT(sab_cn)) sab_cn => qs_env%sab_cn
00665     IF (PRESENT(sac_ae)) sac_ae => qs_env%sac_ae
00666     IF (PRESENT(sac_ppl)) sac_ppl => qs_env%sac_ppl
00667     IF (PRESENT(sap_ppnl)) sap_ppnl => qs_env%sap_ppnl
00668     IF (PRESENT(sap_oce)) sap_oce =>  qs_env%sap_oce
00669     IF (PRESENT(sab_se)) sab_se =>  qs_env%sab_se
00670     IF (PRESENT(sab_lrc)) sab_lrc =>  qs_env%sab_lrc
00671     IF (PRESENT(sab_tbe)) sab_tbe =>  qs_env%sab_tbe
00672     IF (PRESENT(sab_core)) sab_core =>  qs_env%sab_core
00673     IF (PRESENT(energy)) energy => qs_env%energy
00674     IF (PRESENT(force)) force => qs_env%force
00675     IF (PRESENT(use_harris)) use_harris = qs_env%use_harris
00676     IF (PRESENT(harris_env)) harris_env => qs_env%harris_env
00677     IF (PRESENT(matrix_h)) matrix_h => qs_env%matrix_h
00678     IF (PRESENT(matrix_ks)) matrix_ks => qs_env%matrix_ks
00679     IF (PRESENT(matrix_vxc)) matrix_vxc => qs_env%matrix_vxc
00680     IF (PRESENT(matrix_ks_aux_fit)) matrix_ks_aux_fit => qs_env%matrix_ks_aux_fit
00681     IF (PRESENT(kinetic)) kinetic => qs_env%kinetic
00682     IF (PRESENT(matrix_s)) matrix_s => qs_env%matrix_s
00683     IF (PRESENT(matrix_s_aux_fit)) matrix_s_aux_fit => qs_env%matrix_s_aux_fit
00684     IF (PRESENT(matrix_s_aux_fit_vs_orb)) matrix_s_aux_fit_vs_orb => qs_env%matrix_s_aux_fit_vs_orb
00685     IF (PRESENT(matrix_w)) matrix_w => qs_env%matrix_w
00686     IF (PRESENT(gamma_matrix)) gamma_matrix => qs_env%gamma_matrix
00687     IF (PRESENT(rho)) rho => qs_env%rho
00688     IF (PRESENT(rho_aux_fit)) rho_aux_fit => qs_env%rho_aux_fit
00689     IF (PRESENT(rho_buffer)) rho_buffer => qs_env%rho_buffer
00690     IF (PRESENT(rho_xc)) rho_xc => qs_env%rho_xc
00691     IF (PRESENT(pw_env)) pw_env => qs_env%pw_env
00692     IF (PRESENT(ewald_env)) ewald_env => qs_env%ewald_env
00693     IF (PRESENT(ewald_pw)) ewald_pw => qs_env%ewald_pw
00694     IF (PRESENT(mpools)) mpools => qs_env%mpools
00695     IF (PRESENT(mpools_aux_fit)) mpools_aux_fit => qs_env%mpools_aux_fit
00696     IF (PRESENT(blacs_env)) blacs_env => qs_env%blacs_env
00697     IF (PRESENT(scf_control)) scf_control => qs_env%scf_control
00698     IF (PRESENT(rel_control)) rel_control => qs_env%rel_control
00699     IF (PRESENT(rho_core)) rho_core => qs_env%rho_core
00700     IF (PRESENT(rho_nlcc)) rho_nlcc => qs_env%rho_nlcc
00701     IF (PRESENT(rho_nlcc_g)) rho_nlcc_g => qs_env%rho_nlcc_g
00702     IF (PRESENT(vppl)) vppl => qs_env%vppl
00703     IF (PRESENT(vee)) vee => qs_env%vee
00704     IF (PRESENT(qs_charges)) qs_charges => qs_env%qs_charges
00705     IF (PRESENT(ks_env)) ks_env => qs_env%ks_env
00706     IF (PRESENT(ks_qmmm_env)) ks_qmmm_env => qs_env%ks_qmmm_env
00707     IF (PRESENT(wf_history)) wf_history => qs_env%wf_history
00708     IF (PRESENT(scf_env)) scf_env => qs_env%scf_env
00709     IF (PRESENT(id_nr)) id_nr=qs_env%id_nr
00710     IF (PRESENT(subsys)) subsys => qs_env%subsys
00711     IF (PRESENT(para_env)) para_env => qs_env%para_env
00712     IF (PRESENT(distribution_2d)) distribution_2d => qs_env%distribution_2d
00713     IF (PRESENT(dbcsr_dist)) dbcsr_dist => qs_env%dbcsr_dist
00714     IF (PRESENT(oce)) oce =>  qs_env%oce
00715     IF (PRESENT(requires_mo_derivs)) requires_mo_derivs = qs_env%requires_mo_derivs
00716     IF (PRESENT(has_unit_metric)) has_unit_metric = qs_env%has_unit_metric
00717     IF (PRESENT(mo_derivs)) mo_derivs => qs_env%mo_derivs
00718     IF (PRESENT(mo_derivs_aux_fit)) mo_derivs_aux_fit => qs_env%mo_derivs_aux_fit
00719     IF (PRESENT(mo_loc_history)) mo_loc_history => qs_env%mo_loc_history
00720     IF (PRESENT(tddfpt_control)) tddfpt_control => qs_env%dft_control%tddfpt_control
00721     IF (PRESENT(linres_control)) linres_control => qs_env%linres_control
00722     IF (PRESENT(virial)) virial => qs_env%virial
00723     IF (PRESENT(se_taper)) se_taper => qs_env%se_taper
00724     IF (PRESENT(se_store_int_env)) se_store_int_env => qs_env%se_store_int_env
00725     IF (PRESENT(se_nddo_mpole)) se_nddo_mpole => qs_env%se_nddo_mpole
00726     IF (PRESENT(se_nonbond_env)) se_nonbond_env => qs_env%se_nonbond_env
00727     IF (PRESENT(admm_env)) admm_env => qs_env%admm_env
00728     IF (PRESENT(lri_env)) lri_env => qs_env%lri_env
00729     IF (PRESENT(lri_density)) lri_density => qs_env%lri_density
00730     IF (PRESENT(hfx_ri_env)) hfx_ri_env => qs_env%hfx_ri_env
00731     IF (PRESENT(dispersion_env)) dispersion_env => qs_env%dispersion_env
00732     IF (PRESENT(run_rtp)) run_rtp=qs_env%run_rtp
00733     IF (PRESENT(rtp)) rtp=>qs_env%rtp
00734     IF (PRESENT(ls_scf_env)) ls_scf_env=>qs_env%ls_scf_env
00735 
00736     IF (PRESENT(rho_atom_set)) &
00737        CALL get_local_rho(qs_env%local_rho_set, rho_atom_set=rho_atom_set)
00738     IF (PRESENT(rho0_atom_set)) &
00739        CALL get_local_rho(qs_env%local_rho_set, rho0_atom_set=rho0_atom_set)
00740     IF (PRESENT(rho0_mpole)) &
00741          CALL get_local_rho(qs_env%local_rho_set,  rho0_mpole=rho0_mpole)
00742     IF (PRESENT(rhoz_set)) &
00743          CALL get_local_rho(qs_env%local_rho_set, rhoz_set=rhoz_set)
00744     IF (PRESENT(ecoul_1c)) &
00745          CALL get_hartree_local(qs_env%hartree_local,ecoul_1c=ecoul_1c)
00746     IF (PRESENT(rho0_s_rs)) THEN
00747        CALL get_local_rho(qs_env%local_rho_set,  rho0_mpole=rho0_m)
00748        IF(ASSOCIATED(rho0_m)) THEN
00749          rho0_s_rs => rho0_m%rho0_s_rs
00750        END IF
00751     END IF
00752     IF (PRESENT(rho0_s_gs)) THEN
00753        CALL get_local_rho(qs_env%local_rho_set,  rho0_mpole=rho0_m)
00754        IF(ASSOCIATED(rho0_m)) THEN
00755          rho0_s_gs => rho0_m%rho0_s_gs
00756        END IF
00757     END IF
00758 
00759     IF(PRESENT(xas_env)) xas_env => qs_env%xas_env
00760 
00761     CALL cp_subsys_get(qs_env%subsys,&
00762                       atomic_kinds=atomic_kinds,&
00763                       local_molecules_new=local_molecules,&
00764                       local_particles=local_particles,&
00765                       particles=particles,&
00766                       molecule_kinds_new=molecule_kinds_new,&
00767                       molecules_new=molecules_new,&
00768                       error=error)
00769 
00770     IF (PRESENT(natom)) natom=SIZE(particles%els)
00771     IF (PRESENT(nkind)) nkind=SIZE(atomic_kinds%els)
00772     IF (PRESENT(atomic_kind_set)) atomic_kind_set => atomic_kinds%els
00773     IF (PRESENT(particle_set)) particle_set => particles%els
00774     IF (PRESENT(molecule_kind_set)) molecule_kind_set => molecule_kinds_new%els
00775     IF (PRESENT(molecule_set)) molecule_set => molecules_new%els
00776     IF (PRESENT(input)) input => qs_env%input
00777     IF (PRESENT(cp_ddapc_env)) cp_ddapc_env => qs_env%cp_ddapc_env
00778     IF (PRESENT(cp_ddapc_ewald)) cp_ddapc_ewald => qs_env%cp_ddapc_ewald
00779     IF (PRESENT(ep_qs_env)) ep_qs_env => qs_env%ep_qs_env
00780     IF (PRESENT(x_data)) x_data => qs_env%x_data
00781     IF (PRESENT(et_coupling)) et_coupling => qs_env%et_coupling
00782     IF (PRESENT(dftb_potential)) dftb_potential => qs_env%dftb_potential
00783     IF (PRESENT(scp_env)) scp_env => qs_env%scp_env
00784     IF (PRESENT(efield)) efield => qs_env%efield
00785 
00786     IF (PRESENT(atprop)) atprop => qs_env%atprop
00787 
00788     IF (PRESENT(results)) results => qs_env%results
00789     IF (PRESENT(task_list)) task_list => qs_env%task_list
00790     IF (PRESENT(task_list_aux_fit)) task_list_aux_fit => qs_env%task_list_aux_fit
00791     IF (PRESENT(task_list_soft)) task_list_soft => qs_env%task_list_soft
00792 
00793     IF (PRESENT(WannierCentres)) WannierCentres => qs_env%WannierCentres
00794 
00795   END SUBROUTINE get_qs_env
00796 
00797 ! *****************************************************************************
00803   SUBROUTINE init_qs_env(qs_env,para_env,globenv,error)
00804 
00805     TYPE(qs_environment_type), POINTER       :: qs_env
00806     TYPE(cp_para_env_type), POINTER          :: para_env
00807     TYPE(global_environment_type), POINTER   :: globenv
00808     TYPE(cp_error_type), INTENT(inout)       :: error
00809 
00810     NULLIFY (qs_env%blacs_env)
00811     NULLIFY (qs_env%ls_scf_env)
00812     NULLIFY (qs_env%image_matrix)
00813     NULLIFY (qs_env%ipiv)
00814     NULLIFY (qs_env%image_coeff)
00815     NULLIFY (qs_env%ga_env)
00816     NULLIFY (qs_env%cell)
00817     NULLIFY (qs_env%super_cell)
00818     NULLIFY (qs_env%cell_ref)
00819     NULLIFY (qs_env%dft_control)
00820     NULLIFY (qs_env%mos)
00821     NULLIFY (qs_env%mos_aux_fit)
00822     NULLIFY (qs_env%sab_orb)
00823     NULLIFY (qs_env%sab_aux_fit)
00824     NULLIFY (qs_env%sab_aux_fit_asymm)
00825     NULLIFY (qs_env%sab_aux_fit_vs_orb)
00826     NULLIFY (qs_env%sab_scp)
00827     NULLIFY (qs_env%sab_vdw)
00828     NULLIFY (qs_env%sab_cn)
00829     NULLIFY (qs_env%sab_all)
00830     NULLIFY (qs_env%sac_ae)
00831     NULLIFY (qs_env%sac_ppl)
00832     NULLIFY (qs_env%sap_ppnl)
00833     NULLIFY (qs_env%sap_oce)
00834     NULLIFY (qs_env%sab_se)
00835     NULLIFY (qs_env%sab_lrc)
00836     NULLIFY (qs_env%sab_tbe)
00837     NULLIFY (qs_env%sab_core)
00838     NULLIFY (qs_env%energy)
00839     NULLIFY (qs_env%force)
00840     NULLIFY (qs_env%harris_env)
00841     NULLIFY (qs_env%matrix_h)
00842     NULLIFY (qs_env%matrix_ks)
00843     NULLIFY (qs_env%matrix_vxc)
00844     NULLIFY (qs_env%matrix_ks_aux_fit)
00845     NULLIFY (qs_env%kinetic)
00846     NULLIFY (qs_env%matrix_s)
00847     NULLIFY (qs_env%matrix_s_aux_fit)
00848     NULLIFY (qs_env%matrix_s_aux_fit_vs_orb)
00849     NULLIFY (qs_env%matrix_w)
00850     NULLIFY (qs_env%gamma_matrix)
00851     NULLIFY (qs_env%mpools)
00852     NULLIFY (qs_env%mpools_aux_fit)
00853     NULLIFY (qs_env%rho)
00854     NULLIFY (qs_env%rho_aux_fit)
00855     NULLIFY (qs_env%rho_buffer)
00856     NULLIFY (qs_env%rho_xc)
00857     NULLIFY (qs_env%pw_env)
00858     NULLIFY (qs_env%ewald_env)
00859     NULLIFY (qs_env%ewald_pw)
00860     NULLIFY (qs_env%scf_control)
00861     NULLIFY (qs_env%rel_control)
00862     NULLIFY (qs_env%qs_charges)
00863     NULLIFY (qs_env%rho_nlcc)
00864     NULLIFY (qs_env%rho_nlcc_g)
00865     NULLIFY (qs_env%rho_core)
00866     NULLIFY (qs_env%vppl)
00867     NULLIFY (qs_env%vee)
00868     NULLIFY (qs_env%ks_env)
00869     NULLIFY (qs_env%ks_qmmm_env)
00870     NULLIFY (qs_env%wf_history)
00871     NULLIFY (qs_env%scf_env)
00872     NULLIFY (qs_env%distribution_2d)
00873     NULLIFY (qs_env%dbcsr_dist)
00874     NULLIFY (qs_env%subsys)
00875     NULLIFY (qs_env%blacs_env)
00876     NULLIFY (qs_env%oce)
00877     NULLIFY (qs_env%local_rho_set)
00878     NULLIFY (qs_env%hartree_local)
00879     NULLIFY (qs_env%input)
00880     NULLIFY (qs_env%linres_control)
00881     NULLIFY (qs_env%xas_env)
00882     NULLIFY (qs_env%virial)
00883     NULLIFY (qs_env%cp_ddapc_env)
00884     NULLIFY (qs_env%cp_ddapc_ewald)
00885     NULLIFY (qs_env%outer_scf_history)
00886     NULLIFY (qs_env%ep_qs_env)
00887     NULLIFY (qs_env%x_data)
00888     NULLIFY (qs_env%et_coupling)
00889     NULLIFY (qs_env%dftb_potential)
00890     NULLIFY (qs_env%results)
00891     NULLIFY (qs_env%task_list)
00892     NULLIFY (qs_env%task_list_aux_fit)
00893     NULLIFY (qs_env%task_list_soft)
00894     NULLIFY (qs_env%scp_env)
00895     NULLIFY (qs_env%se_taper)
00896     NULLIFY (qs_env%se_store_int_env)
00897     NULLIFY (qs_env%se_nddo_mpole)
00898     NULLIFY (qs_env%se_nonbond_env)
00899     NULLIFY (qs_env%admm_env)
00900     NULLIFY (qs_env%efield)
00901     NULLIFY (qs_env%lri_env)
00902     NULLIFY (qs_env%lri_density)
00903     NULLIFY (qs_env%hfx_ri_env)
00904     NULLIFY (qs_env%dispersion_env)
00905     NULLIFY (qs_env%rtp)
00906     NULLIFY (qs_env%mp2_env)
00907     NULLIFY (qs_env%kg_env)
00908     NULLIFY (qs_env%WannierCentres)
00909     NULLIFY (qs_env%atprop)
00910 
00911     qs_env%outer_scf_ihistory=0
00912     qs_env%broyden_adaptive_sigma=-1.0_dp
00913     qs_env%neighbor_list_id=-1
00914     qs_env%nelectron_total=-1
00915     qs_env%nelectron_spin=-1
00916 
00917     CALL local_rho_set_create(qs_env%local_rho_set, error=error)
00918     CALL hartree_local_create(qs_env%hartree_local, error=error)
00919     CALL cp_subsys_create(qs_env%subsys, para_env=para_env, error=error)
00920     CALL cp_para_env_retain(para_env,error=error)
00921     qs_env%para_env => para_env
00922     CALL cp_blacs_env_create(qs_env%blacs_env,qs_env%para_env,&
00923                              globenv%blacs_grid_layout,&
00924                              globenv%blacs_repeatable,error=error)
00925     qs_env%ref_count=1
00926     last_qs_env_id_nr=last_qs_env_id_nr+1
00927     qs_env%id_nr=last_qs_env_id_nr
00928     qs_env%run_rtp=.FALSE.
00929     qs_env%use_ref_cell=.FALSE.
00930     qs_env%qmmm=.FALSE.
00931     qs_env%qmmm_periodic=.FALSE.
00932     qs_env%requires_mo_derivs=.FALSE.
00933     qs_env%requires_matrix_vxc=.FALSE.
00934     qs_env%has_unit_metric=.FALSE.
00935     qs_env%use_harris=.FALSE.
00936     qs_env%calc_image_preconditioner=.TRUE.
00937     qs_env%target_time = globenv%cp2k_target_time
00938     qs_env%start_time = globenv%cp2k_start_time
00939 
00940     qs_env%sim_time=0._dp
00941     qs_env%sim_step=0
00942     ! Zero all variables containing results
00943     CALL cp_result_create(qs_env%results, error)
00944     NULLIFY(qs_env%mo_derivs)
00945     NULLIFY(qs_env%mo_derivs_aux_fit)
00946     NULLIFY(qs_env%mo_loc_history)
00947 
00948   END SUBROUTINE init_qs_env
00949 
00950 ! *****************************************************************************
00956   SUBROUTINE set_qs_env(qs_env,cell,super_cell,cell_ref,use_ref_cell,dft_control,&
00957        mos,mos_aux_fit,qmmm,qmmm_periodic,sab_orb,sab_aux_fit,sab_aux_fit_asymm, &
00958        sab_aux_fit_vs_orb,sab_all,sac_ae,sac_ppl,sap_ppnl,sap_oce,sab_lrc,&
00959        sab_se,sab_tbe,sab_core,sab_scp,sab_vdw,sab_cn,energy,force,harris_env,matrix_h,matrix_ks,matrix_vxc,&
00960        matrix_ks_aux_fit, matrix_s,matrix_s_aux_fit,matrix_s_aux_fit_vs_orb,matrix_w,&
00961        gamma_matrix,pw_env,ewald_env,ewald_pw,mpools,mpools_aux_fit,rho,vee,&
00962        rho_aux_fit,rho_buffer,rho_xc,kinetic,scf_control,rel_control,qs_charges,vppl,rho_core,rho_nlcc, rho_nlcc_g, ks_env,&
00963        ks_qmmm_env,wf_history,scf_env,use_harris,task_list,task_list_aux_fit,task_list_soft,&
00964        distribution_2d,dbcsr_dist,input, subsys, oce,rho_atom_set,rho0_atom_set,rho0_mpole,run_rtp,rtp,&
00965        rhoz_set,rhoz_tot,ecoul_1c,has_unit_metric,requires_mo_derivs,mo_derivs,&
00966        mo_derivs_aux_fit, mo_loc_history, nelectron_total, nelectron_spin, efield,&
00967        neighbor_list_id,linres_control,xas_env,virial,cp_ddapc_env,cp_ddapc_ewald,&
00968        outer_scf_history,outer_scf_ihistory,ep_qs_env,x_data,et_coupling,dftb_potential,&
00969        scp_env,se_taper,se_store_int_env,se_nddo_mpole,se_nonbond_env,admm_env,ls_scf_env,&
00970        lri_env,lri_density,hfx_ri_env,dispersion_env,mp2_env,kg_env,WannierCentres,ga_env,atprop,error)
00971 
00972     TYPE(qs_environment_type), POINTER       :: qs_env
00973     TYPE(cell_type), OPTIONAL, POINTER       :: cell, super_cell, cell_ref
00974     LOGICAL, OPTIONAL                        :: use_ref_cell
00975     TYPE(dft_control_type), OPTIONAL, 
00976       POINTER                                :: dft_control
00977     TYPE(mo_set_p_type), DIMENSION(:), 
00978       OPTIONAL, POINTER                      :: mos, mos_aux_fit
00979     LOGICAL, OPTIONAL                        :: qmmm, qmmm_periodic
00980     TYPE(neighbor_list_set_p_type), DIMENSION(:), OPTIONAL, POINTER :: 
00981       sab_orb, sab_aux_fit, sab_aux_fit_asymm, sab_aux_fit_vs_orb, sab_all, 
00982       sac_ae, sac_ppl, sap_ppnl, sap_oce, sab_lrc, sab_se, sab_tbe, sab_core, 
00983       sab_scp, sab_vdw, sab_cn
00984     TYPE(qs_energy_type), OPTIONAL, POINTER  :: energy
00985     TYPE(qs_force_type), DIMENSION(:), 
00986       OPTIONAL, POINTER                      :: force
00987     TYPE(harris_env_type), OPTIONAL, POINTER :: harris_env
00988     TYPE(cp_dbcsr_p_type), DIMENSION(:), OPTIONAL, POINTER :: matrix_h, 
00989       matrix_ks, matrix_vxc, matrix_ks_aux_fit, matrix_s, matrix_s_aux_fit, 
00990       matrix_s_aux_fit_vs_orb, matrix_w, gamma_matrix
00991     TYPE(pw_env_type), OPTIONAL, POINTER     :: pw_env
00992     TYPE(ewald_environment_type), OPTIONAL, 
00993       POINTER                                :: ewald_env
00994     TYPE(ewald_pw_type), OPTIONAL, POINTER   :: ewald_pw
00995     TYPE(qs_matrix_pools_type), OPTIONAL, 
00996       POINTER                                :: mpools, mpools_aux_fit
00997     TYPE(qs_rho_type), OPTIONAL, POINTER     :: rho
00998     TYPE(pw_p_type), OPTIONAL, POINTER       :: vee
00999     TYPE(qs_rho_type), OPTIONAL, POINTER     :: rho_aux_fit, rho_buffer, 
01000                                                 rho_xc
01001     TYPE(cp_dbcsr_p_type), DIMENSION(:), 
01002       OPTIONAL, POINTER                      :: kinetic
01003     TYPE(scf_control_type), OPTIONAL, 
01004       POINTER                                :: scf_control
01005     TYPE(rel_control_type), OPTIONAL, 
01006       POINTER                                :: rel_control
01007     TYPE(qs_charges_type), OPTIONAL, POINTER :: qs_charges
01008     TYPE(pw_p_type), OPTIONAL, POINTER       :: vppl, rho_core, rho_nlcc, 
01009                                                 rho_nlcc_g
01010     TYPE(qs_ks_env_type), OPTIONAL, POINTER  :: ks_env
01011     TYPE(qs_ks_qmmm_env_type), OPTIONAL, 
01012       POINTER                                :: ks_qmmm_env
01013     TYPE(qs_wf_history_type), OPTIONAL, 
01014       POINTER                                :: wf_history
01015     TYPE(qs_scf_env_type), OPTIONAL, POINTER :: scf_env
01016     LOGICAL, OPTIONAL                        :: use_harris
01017     TYPE(task_list_type), OPTIONAL, POINTER  :: task_list, task_list_aux_fit, 
01018                                                 task_list_soft
01019     TYPE(distribution_2d_type), OPTIONAL, 
01020       POINTER                                :: distribution_2d
01021     TYPE(dbcsr_distribution_obj), OPTIONAL, 
01022       POINTER                                :: dbcsr_dist
01023     TYPE(section_vals_type), OPTIONAL, 
01024       POINTER                                :: input
01025     TYPE(cp_subsys_type), OPTIONAL, POINTER  :: subsys
01026     TYPE(oce_matrix_type), OPTIONAL, POINTER :: oce
01027     TYPE(rho_atom_type), DIMENSION(:), 
01028       OPTIONAL, POINTER                      :: rho_atom_set
01029     TYPE(rho0_atom_type), DIMENSION(:), 
01030       OPTIONAL, POINTER                      :: rho0_atom_set
01031     TYPE(rho0_mpole_type), OPTIONAL, POINTER :: rho0_mpole
01032     LOGICAL, OPTIONAL                        :: run_rtp
01033     TYPE(rt_prop_type), OPTIONAL, POINTER    :: rtp
01034     TYPE(rhoz_type), DIMENSION(:), 
01035       OPTIONAL, POINTER                      :: rhoz_set
01036     REAL(dp), OPTIONAL                       :: rhoz_tot
01037     TYPE(ecoul_1center_type), DIMENSION(:), 
01038       OPTIONAL, POINTER                      :: ecoul_1c
01039     LOGICAL, OPTIONAL                        :: has_unit_metric, 
01040                                                 requires_mo_derivs
01041     TYPE(cp_dbcsr_p_type), DIMENSION(:), 
01042       OPTIONAL, POINTER                      :: mo_derivs
01043     TYPE(cp_fm_p_type), DIMENSION(:), 
01044       OPTIONAL, POINTER                      :: mo_derivs_aux_fit, 
01045                                                 mo_loc_history
01046     INTEGER, OPTIONAL                        :: nelectron_total
01047     INTEGER, DIMENSION(2), OPTIONAL          :: nelectron_spin
01048     TYPE(efield_berry_type), OPTIONAL, 
01049       POINTER                                :: efield
01050     INTEGER, OPTIONAL                        :: neighbor_list_id
01051     TYPE(linres_control_type), OPTIONAL, 
01052       POINTER                                :: linres_control
01053     TYPE(xas_environment_type), OPTIONAL, 
01054       POINTER                                :: xas_env
01055     TYPE(virial_type), OPTIONAL, POINTER     :: virial
01056     TYPE(cp_ddapc_type), OPTIONAL, POINTER   :: cp_ddapc_env
01057     TYPE(cp_ddapc_ewald_type), OPTIONAL, 
01058       POINTER                                :: cp_ddapc_ewald
01059     REAL(KIND=dp), DIMENSION(:, :), 
01060       OPTIONAL, POINTER                      :: outer_scf_history
01061     INTEGER, INTENT(IN), OPTIONAL            :: outer_scf_ihistory
01062     TYPE(ep_qs_type), OPTIONAL, POINTER      :: ep_qs_env
01063     TYPE(hfx_type), DIMENSION(:, :), 
01064       OPTIONAL, POINTER                      :: x_data
01065     TYPE(et_coupling_type), OPTIONAL, 
01066       POINTER                                :: et_coupling
01067     TYPE(qs_dftb_pairpot_type), 
01068       DIMENSION(:, :), OPTIONAL, POINTER     :: dftb_potential
01069     TYPE(scp_environment_type), OPTIONAL, 
01070       POINTER                                :: scp_env
01071     TYPE(se_taper_type), OPTIONAL, POINTER   :: se_taper
01072     TYPE(semi_empirical_si_type), OPTIONAL, 
01073       POINTER                                :: se_store_int_env
01074     TYPE(nddo_mpole_type), OPTIONAL, POINTER :: se_nddo_mpole
01075     TYPE(fist_nonbond_env_type), OPTIONAL, 
01076       POINTER                                :: se_nonbond_env
01077     TYPE(admm_type), OPTIONAL, POINTER       :: admm_env
01078     TYPE(ls_scf_env_type), OPTIONAL, POINTER :: ls_scf_env
01079     TYPE(lri_environment_type), OPTIONAL, 
01080       POINTER                                :: lri_env
01081     TYPE(lri_density_type), OPTIONAL, 
01082       POINTER                                :: lri_density
01083     TYPE(ri_environment_type), OPTIONAL, 
01084       POINTER                                :: hfx_ri_env
01085     TYPE(qs_dispersion_type), OPTIONAL, 
01086       POINTER                                :: dispersion_env
01087     TYPE(mp2_type), OPTIONAL, POINTER        :: mp2_env
01088     TYPE(kg_environment_type), OPTIONAL, 
01089       POINTER                                :: kg_env
01090     TYPE(wannier_centres_type), 
01091       DIMENSION(:), OPTIONAL, POINTER        :: WannierCentres
01092     TYPE(ga_environment_type), OPTIONAL, 
01093       POINTER                                :: ga_env
01094     TYPE(atprop_type), OPTIONAL, POINTER     :: atprop
01095     TYPE(cp_error_type), INTENT(INOUT)       :: error
01096 
01097     CHARACTER(len=*), PARAMETER :: routineN = 'set_qs_env', 
01098       routineP = moduleN//':'//routineN
01099 
01100     LOGICAL                                  :: failure
01101 
01102     failure=.FALSE.
01103 !    CPPrecondition(ASSOCIATED(qs_env),cp_failure_level,routineP,error,failure)
01104     CPPrecondition(qs_env%ref_count>0,cp_failure_level,routineP,error,failure)
01105     IF (PRESENT(ga_env)) THEN
01106        CALL ga_env_retain(ga_env, error)
01107        CALL ga_env_release(qs_env%ga_env,error)
01108        qs_env%ga_env => ga_env
01109     END IF
01110     IF (PRESENT(cell)) THEN
01111        CALL cell_retain(cell, error=error)
01112        CALL cell_release(qs_env%cell,error=error)
01113        qs_env%cell => cell
01114     END IF
01115     IF (PRESENT(nelectron_total)) qs_env%nelectron_total=nelectron_total
01116     IF (PRESENT(mp2_env)) qs_env%mp2_env=>mp2_env
01117     IF (PRESENT(kg_env)) qs_env%kg_env => kg_env
01118     IF (PRESENT(nelectron_spin))  qs_env%nelectron_spin=nelectron_spin
01119     IF (PRESENT(super_cell)) THEN
01120        CALL cell_retain(super_cell, error=error)
01121        CALL cell_release(qs_env%super_cell,error=error)
01122        qs_env%super_cell => super_cell
01123     END IF
01124     IF (PRESENT(cell_ref)) THEN
01125        CALL cell_retain(cell_ref, error=error)
01126        CALL cell_release(qs_env%cell_ref,error=error)
01127        qs_env%cell_ref => cell_ref
01128     END IF
01129     IF (PRESENT(dft_control)) THEN
01130        CALL dft_control_retain(dft_control, error=error)
01131        CALL dft_control_release(qs_env%dft_control, error=error)
01132        qs_env%dft_control => dft_control
01133     END IF
01134     IF ( PRESENT ( use_ref_cell ) ) qs_env%use_ref_cell = use_ref_cell
01135     IF ( PRESENT ( qmmm ) ) qs_env%qmmm = qmmm
01136     IF ( PRESENT ( qmmm_periodic ) ) qs_env%qmmm_periodic = qmmm_periodic
01137     IF (PRESENT(mos)) qs_env%mos => mos
01138     IF (PRESENT(mos_aux_fit)) qs_env%mos_aux_fit => mos_aux_fit
01139     IF (PRESENT(neighbor_list_id)) qs_env%neighbor_list_id=neighbor_list_id
01140     IF (PRESENT(sab_orb)) qs_env%sab_orb => sab_orb
01141     IF (PRESENT(sab_aux_fit)) qs_env%sab_aux_fit => sab_aux_fit
01142     IF (PRESENT(sab_aux_fit_asymm)) qs_env%sab_aux_fit_asymm => sab_aux_fit_asymm
01143     IF (PRESENT(sab_aux_fit_vs_orb)) qs_env%sab_aux_fit_vs_orb => sab_aux_fit_vs_orb
01144     IF (PRESENT(sab_scp)) qs_env%sab_scp => sab_scp
01145     IF (PRESENT(sab_vdw)) qs_env%sab_vdw => sab_vdw
01146     IF (PRESENT(sab_cn)) qs_env%sab_cn => sab_cn
01147     IF (PRESENT(sab_all)) qs_env%sab_all => sab_all
01148     IF (PRESENT(sac_ae)) qs_env%sac_ae => sac_ae
01149     IF (PRESENT(sac_ppl)) qs_env%sac_ppl => sac_ppl
01150     IF (PRESENT(sap_ppnl)) qs_env%sap_ppnl => sap_ppnl
01151     IF (PRESENT(ls_scf_env)) qs_env%ls_scf_env => ls_scf_env
01152     IF (PRESENT(sap_oce)) qs_env%sap_oce => sap_oce
01153     IF (PRESENT(sab_se)) qs_env%sab_se => sab_se
01154     IF (PRESENT(sab_lrc)) qs_env%sab_lrc => sab_lrc
01155     IF (PRESENT(sab_tbe)) qs_env%sab_tbe => sab_tbe
01156     IF (PRESENT(sab_core)) qs_env%sab_core => sab_core
01157     IF (PRESENT(energy)) qs_env%energy => energy
01158     ! if intels checking (-C) complains here, you have rediscovered a bug in the intel
01159     ! compiler (present in at least 10.0.025). A testcase has been submitted to intel.
01160     IF (PRESENT(force)) qs_env%force => force
01161     IF (PRESENT(use_harris)) qs_env%use_harris = use_harris
01162     IF (PRESENT(harris_env)) qs_env%harris_env => harris_env
01163     IF (PRESENT(matrix_h)) qs_env%matrix_h => matrix_h
01164     IF (PRESENT(matrix_ks)) qs_env%matrix_ks => matrix_ks
01165     IF (PRESENT(matrix_vxc)) qs_env%matrix_vxc => matrix_vxc
01166     IF (PRESENT(matrix_ks_aux_fit)) qs_env%matrix_ks_aux_fit => matrix_ks_aux_fit
01167     IF (PRESENT(matrix_s)) qs_env%matrix_s => matrix_s
01168     IF (PRESENT(matrix_s_aux_fit)) qs_env%matrix_s_aux_fit => matrix_s_aux_fit
01169     IF (PRESENT(matrix_s_aux_fit_vs_orb)) qs_env%matrix_s_aux_fit_vs_orb => matrix_s_aux_fit_vs_orb
01170     IF (PRESENT(matrix_w)) qs_env%matrix_w => matrix_w
01171     IF (PRESENT(gamma_matrix)) qs_env%gamma_matrix => gamma_matrix
01172     IF (PRESENT(oce)) qs_env%oce => oce
01173     IF (PRESENT(outer_scf_history)) qs_env%outer_scf_history=>outer_scf_history
01174     IF (PRESENT(outer_scf_ihistory)) qs_env%outer_scf_ihistory=outer_scf_ihistory
01175     IF (PRESENT(requires_mo_derivs)) qs_env%requires_mo_derivs=requires_mo_derivs
01176     IF (PRESENT(has_unit_metric)) qs_env%has_unit_metric=has_unit_metric
01177     IF (PRESENT(mo_derivs)) qs_env%mo_derivs=>mo_derivs
01178     IF (PRESENT(mo_derivs_aux_fit)) qs_env%mo_derivs_aux_fit=>mo_derivs_aux_fit
01179     IF (PRESENT(mo_loc_history)) qs_env%mo_loc_history=>mo_loc_history
01180     IF (PRESENT(task_list)) qs_env%task_list=>task_list
01181     IF (PRESENT(task_list_aux_fit)) qs_env%task_list_aux_fit=>task_list_aux_fit
01182     IF (PRESENT(task_list_soft)) qs_env%task_list_soft=>task_list_soft
01183     IF (PRESENT(run_rtp)) qs_env%run_rtp=run_rtp
01184     IF (PRESENT(rtp)) qs_env%rtp=>rtp
01185     IF (PRESENT(efield)) qs_env%efield=>efield
01186     IF (PRESENT(atprop)) qs_env%atprop=>atprop
01187     IF (PRESENT(rho)) THEN ! accepts also null pointers !
01188       IF (ASSOCIATED(rho)) CALL qs_rho_retain(rho,error=error)
01189       CALL qs_rho_release(qs_env%rho,error=error)
01190       qs_env%rho => rho
01191     END IF
01192     IF (PRESENT(rho_aux_fit)) THEN ! accepts also null pointers !
01193       IF (ASSOCIATED(rho_aux_fit)) CALL qs_rho_retain(rho_aux_fit,error=error)
01194       CALL qs_rho_release(qs_env%rho_aux_fit,error=error)
01195       qs_env%rho_aux_fit => rho_aux_fit
01196     END IF
01197     IF (PRESENT(rho_buffer)) THEN ! accepts also null pointers !
01198       IF (ASSOCIATED(rho_buffer)) CALL qs_rho_retain(rho_buffer,error=error)
01199       CALL qs_rho_release(qs_env%rho_buffer,error=error)
01200       qs_env%rho_buffer => rho_buffer
01201     END IF
01202     IF (PRESENT(rho_xc)) THEN ! accepts also null pointers !
01203       IF (ASSOCIATED(rho_xc)) CALL qs_rho_retain(rho_xc,error=error)
01204       CALL qs_rho_release(qs_env%rho_xc,error=error)
01205       qs_env%rho_xc => rho_xc
01206     END IF
01207 
01208     IF (PRESENT(pw_env)) THEN ! accept also null pointers?
01209       CALL pw_env_retain(pw_env,error=error)
01210       CALL pw_env_release(qs_env%pw_env,error=error)
01211       qs_env%pw_env => pw_env
01212     END IF
01213     IF (PRESENT(ewald_env)) THEN ! accept also null pointers?
01214       CALL ewald_env_retain(ewald_env,error=error)
01215       CALL ewald_env_release(qs_env%ewald_env,error=error)
01216       qs_env%ewald_env => ewald_env
01217     END IF
01218     IF (PRESENT(ewald_pw)) THEN ! accept also null pointers?
01219       CALL ewald_pw_retain(ewald_pw,error=error)
01220       CALL ewald_pw_release(qs_env%ewald_pw,error=error)
01221       qs_env%ewald_pw => ewald_pw
01222     END IF
01223     IF (PRESENT(scf_control)) THEN ! accept also null pointers?
01224        CALL scf_c_retain(scf_control,error=error)
01225        CALL scf_c_release(qs_env%scf_control,error=error)
01226        qs_env%scf_control => scf_control
01227     END IF
01228     IF (PRESENT(rel_control)) THEN ! accept also null pointers?
01229        CALL rel_c_retain(rel_control,error=error)
01230        CALL rel_c_release(qs_env%rel_control,error=error)
01231        qs_env%rel_control => rel_control
01232     END IF
01233     IF (PRESENT(linres_control)) THEN ! accept also null pointers?
01234        CALL linres_control_retain(linres_control,error=error)
01235        CALL linres_control_release(qs_env%linres_control,error=error)
01236        qs_env%linres_control => linres_control
01237     END IF
01238     IF (PRESENT(kinetic)) qs_env%kinetic => kinetic
01239     IF (PRESENT(rho_core)) qs_env%rho_core => rho_core
01240     IF (PRESENT(rho_nlcc)) qs_env%rho_nlcc => rho_nlcc
01241     IF (PRESENT(rho_nlcc_g)) qs_env%rho_nlcc_g => rho_nlcc_g
01242     IF (PRESENT(vppl)) qs_env%vppl => vppl
01243     IF (PRESENT(vee)) qs_env%vee => vee
01244     IF (PRESENT(qs_charges)) THEN
01245        CALL qs_charges_retain(qs_charges,error=error)
01246        CALL qs_charges_release(qs_env%qs_charges,error=error)
01247        qs_env%qs_charges => qs_charges
01248     END IF
01249     IF (PRESENT(ks_qmmm_env)) THEN
01250        CALL qs_ks_qmmm_retain(ks_qmmm_env, error=error)
01251        CALL qs_ks_qmmm_release(qs_env%ks_qmmm_env, error=error)
01252        qs_env%ks_qmmm_env => ks_qmmm_env
01253     END IF
01254     IF (PRESENT(ks_env)) THEN ! accept also null pointers?
01255        CALL qs_ks_retain(ks_env, error=error)
01256        CALL qs_ks_release(qs_env%ks_env, error=error)
01257        qs_env%ks_env => ks_env
01258     END IF
01259     IF (PRESENT(wf_history)) THEN ! accept also null pointers ?
01260        CALL wfi_retain(wf_history,error=error)
01261        CALL wfi_release(qs_env%wf_history,error=error)
01262        qs_env%wf_history => wf_history
01263     END IF
01264     IF (PRESENT(scf_env)) THEN ! accept also null pointers ?
01265        CALL scf_env_retain(scf_env,error=error)
01266        CALL scf_env_release(qs_env%scf_env, error=error)
01267        qs_env%scf_env => scf_env
01268     END IF
01269     IF (PRESENT(xas_env)) THEN ! accept also null pointers?
01270        CALL xas_env_retain(xas_env, error=error)
01271        CALL xas_env_release(qs_env%xas_env, error=error)
01272        qs_env%xas_env => xas_env
01273     END IF
01274     IF (PRESENT(virial)) THEN
01275        IF (ASSOCIATED(virial)) THEN
01276           CALL virial_retain(virial,error=error)
01277        END IF
01278        CALL virial_release(qs_env%virial,error=error)
01279        qs_env%virial => virial
01280      END IF
01281     IF (PRESENT(mpools)) THEN
01282        CALL mpools_retain(mpools,error=error)
01283        CALL mpools_release(qs_env%mpools, error=error)
01284        qs_env%mpools => mpools
01285     END IF
01286     IF (PRESENT(mpools_aux_fit)) THEN
01287        CALL mpools_retain(mpools_aux_fit,error=error)
01288        CALL mpools_release(qs_env%mpools_aux_fit, error=error)
01289        qs_env%mpools_aux_fit => mpools_aux_fit
01290     END IF
01291     IF (PRESENT(rho_atom_set)) THEN
01292         CALL set_local_rho(qs_env%local_rho_set,rho_atom_set=rho_atom_set,error=error)
01293      END IF
01294     IF (PRESENT(rho0_atom_set)) THEN
01295         CALL set_local_rho(qs_env%local_rho_set,rho0_atom_set=rho0_atom_set,error=error)
01296     END IF
01297     IF (PRESENT(rho0_mpole)) THEN
01298         CALL set_local_rho(qs_env%local_rho_set,rho0_mpole=rho0_mpole,error=error)
01299     END IF
01300     IF (PRESENT(rhoz_set)) THEN
01301         CALL set_local_rho(qs_env%local_rho_set,rhoz_set=rhoz_set,error=error)
01302     END IF
01303     IF (PRESENT(rhoz_tot)) qs_env%local_rho_set%rhoz_tot = rhoz_tot
01304     IF (PRESENT(ecoul_1c)) THEN
01305         CALL set_hartree_local(qs_env%hartree_local,ecoul_1c=ecoul_1c)
01306     END IF
01307 
01308     IF (PRESENT(subsys)) THEN
01309        CALL cp_subsys_retain(subsys,error=error)
01310        CALL cp_subsys_release(qs_env%subsys,error=error)
01311        qs_env%subsys => subsys
01312     END IF
01313     IF (PRESENT(distribution_2d)) THEN
01314        CALL distribution_2d_retain(distribution_2d,error=error)
01315        CALL distribution_2d_release(qs_env%distribution_2d,error=error)
01316        qs_env%distribution_2d => distribution_2d
01317     ENDIF
01318     IF (PRESENT(dbcsr_dist)) THEN
01319        IF(ASSOCIATED(qs_env%dbcsr_dist)) THEN
01320           CALL cp_dbcsr_distribution_release(qs_env%dbcsr_dist)
01321           DEALLOCATE(qs_env%dbcsr_dist)
01322        ENDIF
01323        qs_env%dbcsr_dist => dbcsr_dist
01324     ENDIF
01325     IF (PRESENT(input)) THEN
01326        CALL section_vals_retain(input,error=error)
01327        CALL section_vals_release(qs_env%input,error=error)
01328        qs_env%input => input
01329     END IF
01330     IF (PRESENT(cp_ddapc_env)) THEN
01331        CALL cp_ddapc_retain(cp_ddapc_env, error=error)
01332        CALL cp_ddapc_release(qs_env%cp_ddapc_env, error=error)
01333        qs_env%cp_ddapc_env => cp_ddapc_env
01334     END IF
01335     IF (PRESENT(cp_ddapc_ewald)) THEN
01336        qs_env%cp_ddapc_ewald => cp_ddapc_ewald
01337     END IF
01338     IF (PRESENT(ep_qs_env)) THEN
01339        IF (ASSOCIATED(ep_qs_env)) CALL ep_qs_retain(ep_qs_env,error=error)
01340        CALL ep_qs_release(qs_env%ep_qs_env,error=error)
01341        qs_env%ep_qs_env => ep_qs_env
01342     END IF
01343     IF (PRESENT(x_data)) qs_env%x_data => x_data
01344     IF (PRESENT(et_coupling))qs_env%et_coupling => et_coupling
01345     IF (PRESENT(dftb_potential))qs_env%dftb_potential => dftb_potential
01346     IF (PRESENT(scp_env)) THEN
01347       CALL scp_env_retain(scp_env,error=error)
01348       CALL scp_env_release(qs_env%scp_env,error=error)
01349       qs_env%scp_env => scp_env
01350     END IF
01351     IF (PRESENT(se_taper)) THEN
01352        CALL se_taper_release(qs_env%se_taper,error=error)
01353        qs_env%se_taper => se_taper
01354     END IF
01355     IF (PRESENT(se_store_int_env)) THEN
01356        CALL semi_empirical_si_release(qs_env%se_store_int_env,error=error)
01357        qs_env%se_store_int_env => se_store_int_env
01358     END IF
01359     IF (PRESENT(se_nddo_mpole)) THEN
01360        CALL nddo_mpole_release(qs_env%se_nddo_mpole,error=error)
01361        qs_env%se_nddo_mpole => se_nddo_mpole
01362     END IF
01363     IF (PRESENT(se_nonbond_env)) THEN
01364        CALL fist_nonbond_env_release(qs_env%se_nonbond_env,error)
01365        qs_env%se_nonbond_env => se_nonbond_env
01366     END IF
01367     IF( PRESENT(admm_env) ) qs_env%admm_env => admm_env
01368     IF( PRESENT(lri_env) ) qs_env%lri_env => lri_env
01369     IF( PRESENT(lri_density) ) qs_env%lri_density => lri_density
01370     IF( PRESENT(hfx_ri_env) ) qs_env%hfx_ri_env => hfx_ri_env
01371     IF( PRESENT(dispersion_env) ) qs_env%dispersion_env => dispersion_env
01372     IF( PRESENT(WannierCentres) ) qs_env%WannierCentres => WannierCentres
01373   END SUBROUTINE set_qs_env
01374 
01375 ! *****************************************************************************
01387   SUBROUTINE qs_env_create(qs_env,para_env,globenv,error)
01388     TYPE(qs_environment_type), POINTER       :: qs_env
01389     TYPE(cp_para_env_type), POINTER          :: para_env
01390     TYPE(global_environment_type), POINTER   :: globenv
01391     TYPE(cp_error_type), INTENT(inout)       :: error
01392 
01393     CHARACTER(len=*), PARAMETER :: routineN = 'qs_env_create', 
01394       routineP = moduleN//':'//routineN
01395 
01396     INTEGER                                  :: stat
01397     LOGICAL                                  :: failure
01398 
01399     failure=.FALSE.
01400 
01401     ALLOCATE(qs_env, stat=stat)
01402     CPPostcondition(stat==0,cp_failure_level,routineP,error,failure)
01403     IF (.NOT. failure) THEN
01404        CALL init_qs_env(qs_env,para_env=para_env,&
01405             globenv=globenv, error=error)
01406     END IF
01407   END SUBROUTINE qs_env_create
01408 
01409 ! *****************************************************************************
01418   SUBROUTINE qs_env_retain(qs_env,error)
01419     TYPE(qs_environment_type), POINTER       :: qs_env
01420     TYPE(cp_error_type), INTENT(inout)       :: error
01421 
01422     CHARACTER(len=*), PARAMETER :: routineN = 'qs_env_retain', 
01423       routineP = moduleN//':'//routineN
01424 
01425     LOGICAL                                  :: failure
01426 
01427     failure=.FALSE.
01428 
01429     CPPrecondition(ASSOCIATED(qs_env),cp_failure_level,routineP,error,failure)
01430     IF (.NOT. failure) THEN
01431        CPPrecondition(qs_env%ref_count>0,cp_failure_level,routineP,error,failure)
01432        qs_env%ref_count=qs_env%ref_count+1
01433     END IF
01434   END SUBROUTINE qs_env_retain
01435 
01436 ! *****************************************************************************
01445   SUBROUTINE qs_env_release(qs_env,error)
01446     TYPE(qs_environment_type), POINTER       :: qs_env
01447     TYPE(cp_error_type), INTENT(inout)       :: error
01448 
01449     CHARACTER(len=*), PARAMETER :: routineN = 'qs_env_release', 
01450       routineP = moduleN//':'//routineN
01451 
01452     INTEGER                                  :: i, stat
01453     LOGICAL                                  :: failure
01454 
01455     failure=.FALSE.
01456 
01457     IF (ASSOCIATED(qs_env)) THEN
01458        CPPrecondition(qs_env%ref_count>0,cp_failure_level,routineP,error,failure)
01459        qs_env%ref_count=qs_env%ref_count-1
01460        IF (qs_env%ref_count<1) THEN
01461           CALL ga_env_release(qs_env%ga_env,error=error)
01462           CALL cell_release(qs_env%cell,error=error)
01463           CALL cell_release(qs_env%super_cell,error=error)
01464           CALL cell_release(qs_env%cell_ref,error=error)
01465           CALL dft_control_release(qs_env%dft_control, error=error)
01466           IF (ASSOCIATED(qs_env%mos)) THEN
01467              DO i=1,SIZE(qs_env%mos)
01468                 CALL deallocate_mo_set(qs_env%mos(i)%mo_set,error=error)
01469              END DO
01470              DEALLOCATE(qs_env%mos, stat=stat)
01471              CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01472           END IF
01473           IF (ASSOCIATED(qs_env%mos_aux_fit)) THEN
01474              DO i=1,SIZE(qs_env%mos_aux_fit)
01475                 CALL deallocate_mo_set(qs_env%mos_aux_fit(i)%mo_set,error=error)
01476              END DO
01477              DEALLOCATE(qs_env%mos_aux_fit, stat=stat)
01478              CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01479           END IF
01480 
01481           IF (ASSOCIATED(qs_env%mo_derivs)) THEN
01482              DO I=1,SIZE(qs_env%mo_derivs)
01483                 CALL cp_dbcsr_release_p(qs_env%mo_derivs(I)%matrix, error=error)
01484              ENDDO
01485              DEALLOCATE(qs_env%mo_derivs, stat=stat)
01486              CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01487           ENDIF
01488 
01489           IF (ASSOCIATED(qs_env%mo_derivs_aux_fit)) THEN
01490              DO I=1,SIZE(qs_env%mo_derivs_aux_fit)
01491                 CALL cp_fm_release(qs_env%mo_derivs_aux_fit(I)%matrix,error=error)
01492              ENDDO
01493              DEALLOCATE(qs_env%mo_derivs_aux_fit, stat=stat)
01494              CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01495           ENDIF
01496 
01497           IF (ASSOCIATED(qs_env%mo_loc_history)) THEN
01498              DO I=1,SIZE(qs_env%mo_loc_history)
01499                 CALL cp_fm_release(qs_env%mo_loc_history(I)%matrix,error=error)
01500              ENDDO
01501              DEALLOCATE(qs_env%mo_loc_history, stat=stat)
01502              CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01503           ENDIF
01504 
01505           IF (ASSOCIATED(qs_env%sab_scp)) THEN
01506              DO i=1,SIZE(qs_env%sab_scp)
01507                 CALL deallocate_neighbor_list_set(&
01508                      qs_env%sab_scp(i)%neighbor_list_set)
01509              END DO
01510              DEALLOCATE(qs_env%sab_scp,stat=stat)
01511              CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01512           END IF
01513           IF (ASSOCIATED(qs_env%sab_vdw)) THEN
01514              DO i=1,SIZE(qs_env%sab_vdw)
01515                 CALL deallocate_neighbor_list_set(&
01516                      qs_env%sab_vdw(i)%neighbor_list_set)
01517              END DO
01518              DEALLOCATE(qs_env%sab_vdw,stat=stat)
01519              CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01520           END IF
01521           IF (ASSOCIATED(qs_env%sab_cn)) THEN
01522              DO i=1,SIZE(qs_env%sab_cn)
01523                 CALL deallocate_neighbor_list_set(&
01524                      qs_env%sab_cn(i)%neighbor_list_set)
01525              END DO
01526              DEALLOCATE(qs_env%sab_cn,stat=stat)
01527              CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01528           END IF
01529           IF (ASSOCIATED(qs_env%sab_orb)) THEN
01530              DO i=1,SIZE(qs_env%sab_orb)
01531                 CALL deallocate_neighbor_list_set(&
01532                      qs_env%sab_orb(i)%neighbor_list_set)
01533              END DO
01534              DEALLOCATE(qs_env%sab_orb,stat=stat)
01535              CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01536           END IF
01537           IF (ASSOCIATED(qs_env%sab_aux_fit)) THEN
01538              DO i=1,SIZE(qs_env%sab_aux_fit)
01539                 CALL deallocate_neighbor_list_set(&
01540                      qs_env%sab_aux_fit(i)%neighbor_list_set)
01541              END DO
01542              DEALLOCATE(qs_env%sab_aux_fit,stat=stat)
01543              CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01544           END IF
01545           IF (ASSOCIATED(qs_env%sab_aux_fit_asymm)) THEN
01546              DO i=1,SIZE(qs_env%sab_aux_fit_asymm)
01547                 CALL deallocate_neighbor_list_set(&
01548                      qs_env%sab_aux_fit_asymm(i)%neighbor_list_set)
01549              END DO
01550              DEALLOCATE(qs_env%sab_aux_fit_asymm,stat=stat)
01551              CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01552           END IF
01553           IF (ASSOCIATED(qs_env%sab_aux_fit_vs_orb)) THEN
01554              DO i=1,SIZE(qs_env%sab_aux_fit_vs_orb)
01555                 CALL deallocate_neighbor_list_set(&
01556                      qs_env%sab_aux_fit_vs_orb(i)%neighbor_list_set)
01557              END DO
01558              DEALLOCATE(qs_env%sab_aux_fit_vs_orb,stat=stat)
01559              CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01560           END IF
01561 
01562           IF (ASSOCIATED(qs_env%sab_all)) THEN
01563              DO i=1,SIZE(qs_env%sab_all)
01564                 CALL deallocate_neighbor_list_set(&
01565                      qs_env%sab_all(i)%neighbor_list_set)
01566              END DO
01567              DEALLOCATE(qs_env%sab_all,stat=stat)
01568              CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01569           END IF
01570           IF (ASSOCIATED(qs_env%sac_ae)) THEN
01571              DO i=1,SIZE(qs_env%sac_ae)
01572                 CALL deallocate_neighbor_list_set(&
01573                      qs_env%sac_ae(i)%neighbor_list_set)
01574              END DO
01575              DEALLOCATE(qs_env%sac_ae,stat=stat)
01576              CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01577           END IF
01578           IF (ASSOCIATED(qs_env%sac_ppl)) THEN
01579              DO i=1,SIZE(qs_env%sac_ppl)
01580                 CALL deallocate_neighbor_list_set(&
01581                      qs_env%sac_ppl(i)%neighbor_list_set)
01582              END DO
01583              DEALLOCATE(qs_env%sac_ppl,stat=stat)
01584              CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01585           END IF
01586           IF (ASSOCIATED(qs_env%sap_ppnl)) THEN
01587              DO i=1,SIZE(qs_env%sap_ppnl)
01588                 CALL deallocate_neighbor_list_set(&
01589                      qs_env%sap_ppnl(i)%neighbor_list_set)
01590              END DO
01591              DEALLOCATE(qs_env%sap_ppnl,stat=stat)
01592              CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01593           END IF
01594           IF (ASSOCIATED(qs_env%sap_oce)) THEN
01595              DO i=1,SIZE(qs_env%sap_oce)
01596                 CALL deallocate_neighbor_list_set(&
01597                      qs_env%sap_oce(i)%neighbor_list_set)
01598              END DO
01599              DEALLOCATE(qs_env%sap_oce,stat=stat)
01600              CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01601           END IF
01602           IF (ASSOCIATED(qs_env%sab_se)) THEN
01603              DO i=1,SIZE(qs_env%sab_se)
01604                 CALL deallocate_neighbor_list_set(&
01605                      qs_env%sab_se(i)%neighbor_list_set)
01606              END DO
01607              DEALLOCATE(qs_env%sab_se,stat=stat)
01608              CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01609           END IF
01610           IF (ASSOCIATED(qs_env%sab_lrc)) THEN
01611              DO i=1,SIZE(qs_env%sab_lrc)
01612                 CALL deallocate_neighbor_list_set(&
01613                      qs_env%sab_lrc(i)%neighbor_list_set)
01614              END DO
01615              DEALLOCATE(qs_env%sab_lrc,stat=stat)
01616              CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01617           END IF
01618           IF (ASSOCIATED(qs_env%sab_tbe)) THEN
01619              DO i=1,SIZE(qs_env%sab_tbe)
01620                 CALL deallocate_neighbor_list_set(&
01621                      qs_env%sab_tbe(i)%neighbor_list_set)
01622              END DO
01623              DEALLOCATE(qs_env%sab_tbe,stat=stat)
01624              CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01625           END IF
01626           IF (ASSOCIATED(qs_env%sab_core)) THEN
01627              DO i=1,SIZE(qs_env%sab_core)
01628                 CALL deallocate_neighbor_list_set(&
01629                      qs_env%sab_core(i)%neighbor_list_set)
01630              END DO
01631              DEALLOCATE(qs_env%sab_core,stat=stat)
01632              CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01633           END IF
01634           IF (ASSOCIATED(qs_env%rtp))THEN
01635              CALL rt_prop_release(qs_env%rtp,error)
01636              DEALLOCATE (qs_env%rtp)
01637           END IF
01638           IF (ASSOCIATED(qs_env%outer_scf_history)) THEN
01639              DEALLOCATE(qs_env%outer_scf_history,stat=stat)
01640              CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01641              qs_env%outer_scf_ihistory=0
01642           ENDIF
01643           IF (ASSOCIATED(qs_env%energy)) &
01644                CALL deallocate_qs_energy(qs_env%energy)
01645           IF (ASSOCIATED(qs_env%force))&
01646                CALL deallocate_qs_force(qs_env%force)
01647           IF (ASSOCIATED(qs_env%harris_env)) THEN
01648              CALL harris_env_release(qs_env%harris_env, error=error)
01649           END IF
01650           IF (ASSOCIATED(qs_env%matrix_h)) THEN
01651              CALL cp_dbcsr_deallocate_matrix_set(qs_env%matrix_h,error)
01652           ENDIF
01653           IF (ASSOCIATED(qs_env%matrix_ks)) THEN
01654              CALL cp_dbcsr_deallocate_matrix_set(qs_env % matrix_ks,error)
01655           ENDIF
01656           IF (ASSOCIATED(qs_env%matrix_vxc)) THEN
01657              CALL cp_dbcsr_deallocate_matrix_set(qs_env % matrix_vxc,error)
01658           ENDIF
01659           IF (ASSOCIATED(qs_env%matrix_ks_aux_fit)) THEN
01660              CALL cp_dbcsr_deallocate_matrix_set(qs_env % matrix_ks_aux_fit,error)
01661           ENDIF
01662           IF (ASSOCIATED(qs_env%matrix_s)) CALL cp_dbcsr_deallocate_matrix_set(qs_env%matrix_s,error)
01663           IF (ASSOCIATED(qs_env%matrix_s_aux_fit)) CALL cp_dbcsr_deallocate_matrix_set(qs_env%matrix_s_aux_fit,error)
01664           IF (ASSOCIATED(qs_env%matrix_s_aux_fit_vs_orb)) CALL cp_dbcsr_deallocate_matrix_set(qs_env%matrix_s_aux_fit_vs_orb,error)
01665           IF (ASSOCIATED(qs_env%matrix_w)) CALL cp_dbcsr_deallocate_matrix_set(qs_env%matrix_w,error)
01666           IF (ASSOCIATED(qs_env%gamma_matrix)) CALL cp_dbcsr_deallocate_matrix_set(qs_env%gamma_matrix,error)
01667           IF (ASSOCIATED(qs_env%oce)) CALL deallocate_oce_set(qs_env%oce,error)
01668 
01669           IF (ASSOCIATED(qs_env%local_rho_set)) THEN
01670              CALL local_rho_set_release(qs_env%local_rho_set,error=error)
01671           END IF
01672           IF (ASSOCIATED(qs_env%hartree_local)) THEN
01673              CALL hartree_local_release(qs_env%hartree_local,error=error)
01674           END IF
01675           IF (ASSOCIATED(qs_env%kinetic))&
01676                CALL cp_dbcsr_deallocate_matrix_set(qs_env%kinetic,error)
01677 
01678           IF(ASSOCIATED(qs_env%rho_xc)) THEN
01679              NULLIFY(qs_env%rho_xc%rho_ao)
01680              CALL qs_rho_release(qs_env%rho_xc, error=error)
01681           END IF
01682           CALL qs_rho_release(qs_env%rho, error=error)
01683           CALL qs_rho_release(qs_env%rho_aux_fit, error=error)
01684           CALL qs_rho_release(qs_env%rho_buffer,error=error)
01685           CALL scf_c_release(qs_env%scf_control, error=error)
01686           CALL rel_c_release(qs_env%rel_control, error=error)
01687 
01688           IF(ASSOCIATED(qs_env%linres_control)) THEN
01689              CALL linres_control_release(qs_env%linres_control, error=error)
01690           END IF
01691 
01692           IF(ASSOCIATED(qs_env%task_list)) THEN
01693              CALL deallocate_task_list(qs_env%task_list,error)
01694           ENDIF
01695           IF(ASSOCIATED(qs_env%task_list_aux_fit)) THEN
01696              CALL deallocate_task_list(qs_env%task_list_aux_fit,error)
01697           ENDIF
01698           IF(ASSOCIATED(qs_env%task_list_soft)) THEN
01699              CALL deallocate_task_list(qs_env%task_list_soft,error)
01700           ENDIF
01701           IF (ASSOCIATED(qs_env%ls_scf_env)) THEN
01702              CALL ls_scf_release(qs_env%ls_scf_env,error)
01703           ENDIF
01704 
01705           !Only if do_xas_calculation
01706           IF(ASSOCIATED(qs_env%xas_env)) THEN
01707              CALL xas_env_release(qs_env%xas_env,error=error)
01708           END IF
01709           IF(ASSOCIATED(qs_env%virial)) THEN
01710              CALL virial_release(qs_env%virial,error=error)
01711           END IF
01712           CALL pw_env_release(qs_env%pw_env, error=error)
01713           CALL ewald_env_release(qs_env%ewald_env, error=error)
01714           CALL ewald_pw_release(qs_env%ewald_pw, error=error)
01715           CALL cp_para_env_release(qs_env%para_env,error=error)
01716           CALL cp_blacs_env_release(qs_env%blacs_env, error=error)
01717           IF (ASSOCIATED(qs_env%rho_nlcc_g)) THEN
01718              CALL pw_release(qs_env%rho_nlcc_g%pw,error=error)
01719              DEALLOCATE(qs_env%rho_nlcc_g)
01720           ENDIF
01721           IF (ASSOCIATED(qs_env%rho_nlcc)) THEN
01722              CALL pw_release(qs_env%rho_nlcc%pw,error=error)
01723              DEALLOCATE(qs_env%rho_nlcc)
01724           ENDIF
01725           IF (ASSOCIATED(qs_env%rho_core)) THEN
01726              CALL pw_release(qs_env%rho_core%pw,error=error)
01727              DEALLOCATE(qs_env%rho_core)
01728           ENDIF
01729           IF (ASSOCIATED(qs_env%image_matrix)) THEN
01730              DEALLOCATE(qs_env%image_matrix)
01731           ENDIF
01732           IF (ASSOCIATED(qs_env%ipiv)) THEN
01733              DEALLOCATE(qs_env%ipiv)
01734           ENDIF
01735           IF (ASSOCIATED(qs_env%image_coeff)) THEN
01736              DEALLOCATE(qs_env%image_coeff)
01737           ENDIF
01738           IF (ASSOCIATED(qs_env%vppl)) THEN
01739              CALL pw_release(qs_env%vppl%pw,error=error)
01740              DEALLOCATE(qs_env%vppl)
01741           ENDIF
01742           IF (ASSOCIATED(qs_env%vee)) THEN
01743              CALL pw_release(qs_env%vee%pw,error=error)
01744              DEALLOCATE(qs_env%vee)
01745           ENDIF
01746           CALL qs_charges_release(qs_env%qs_charges, error=error)
01747           CALL qs_ks_release(qs_env%ks_env, error=error)
01748           CALL qs_ks_qmmm_release(qs_env%ks_qmmm_env, error=error)
01749           CALL wfi_release(qs_env%wf_history,error=error)
01750           CALL scf_env_release(qs_env%scf_env, error=error)
01751           CALL mpools_release(qs_env%mpools,error=error)
01752           CALL mpools_release(qs_env%mpools_aux_fit,error=error)
01753           IF (ASSOCIATED(qs_env%distribution_2d)) THEN
01754              CALL distribution_2d_release(qs_env%distribution_2d,error=error)
01755           ENDIF
01756           IF(ASSOCIATED(qs_env%dbcsr_dist)) THEN
01757              CALL cp_dbcsr_distribution_release(qs_env%dbcsr_dist)
01758              DEALLOCATE(qs_env%dbcsr_dist)
01759           ENDIF
01760           CALL cp_subsys_release(qs_env%subsys,error=error)
01761           CALL section_vals_release(qs_env%input,error=error)
01762           CALL cp_ddapc_release(qs_env%cp_ddapc_env, error=error)
01763           CALL cp_ddapc_ewald_release(qs_env%cp_ddapc_ewald, error=error)
01764           CALL ep_qs_release(qs_env%ep_qs_env,error=error)
01765           CALL efield_berry_release(qs_env%efield,error=error)
01766           CALL cp_result_release(qs_env%results,error=error)
01767           IF(ASSOCIATED(qs_env%x_data)) THEN
01768              CALL hfx_release(qs_env%x_data, error=error)
01769           END IF
01770           IF(ASSOCIATED(qs_env%et_coupling)) THEN
01771              CALL et_coupling_release(qs_env%et_coupling,error)
01772           END IF
01773           IF (ASSOCIATED(qs_env%dftb_potential)) THEN
01774              CALL qs_dftb_pairpot_release(qs_env%dftb_potential,error)
01775           END IF
01776           IF (ASSOCIATED(qs_env%scp_env)) THEN
01777              CALL scp_env_release ( qs_env % scp_env, error )
01778           END IF
01779           IF (ASSOCIATED(qs_env%se_taper)) THEN
01780              CALL se_taper_release(qs_env%se_taper, error)
01781           END IF
01782           IF (ASSOCIATED(qs_env%se_store_int_env)) THEN
01783              CALL semi_empirical_si_release(qs_env%se_store_int_env, error)
01784           END IF
01785           IF (ASSOCIATED(qs_env%se_nddo_mpole)) THEN
01786              CALL nddo_mpole_release(qs_env%se_nddo_mpole, error)
01787           END IF
01788           IF (ASSOCIATED(qs_env%se_nonbond_env)) THEN
01789              CALL fist_nonbond_env_release(qs_env%se_nonbond_env,error)
01790           END IF
01791           IF (ASSOCIATED(qs_env%admm_env)) THEN
01792             CALL admm_env_release(qs_env%admm_env, error)
01793           END IF
01794           IF (ASSOCIATED(qs_env%lri_env)) THEN
01795             CALL lri_env_release(qs_env%lri_env, error)
01796           END IF
01797           IF (ASSOCIATED(qs_env%lri_density)) THEN
01798              CALL lri_density_release(qs_env%lri_density, error)
01799           END IF
01800           IF (ASSOCIATED(qs_env%hfx_ri_env)) THEN
01801             CALL ri_env_release(qs_env%hfx_ri_env, error)
01802           END IF
01803           IF (ASSOCIATED(qs_env%mp2_env)) THEN
01804             CALL mp2_env_release(qs_env%mp2_env, error)
01805           END IF
01806           IF (ASSOCIATED(qs_env%kg_env)) THEN
01807             CALL kg_env_release(qs_env%kg_env, error)
01808           END IF
01809           IF (ASSOCIATED(qs_env%dispersion_env)) THEN
01810             IF (ASSOCIATED(qs_env%dispersion_env%maxci)) THEN
01811               ! DFT-D3 arrays
01812               DEALLOCATE(qs_env%dispersion_env%maxci, stat=stat)
01813               CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01814               DEALLOCATE(qs_env%dispersion_env%c6ab, stat=stat)
01815               CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01816               DEALLOCATE(qs_env%dispersion_env%r0ab, stat=stat)
01817               CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01818               DEALLOCATE(qs_env%dispersion_env%rcov, stat=stat)
01819               CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01820               DEALLOCATE(qs_env%dispersion_env%r2r4, stat=stat)
01821               CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01822               DEALLOCATE(qs_env%dispersion_env%cn, stat=stat)
01823               CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01824               IF (ASSOCIATED(qs_env%dispersion_env%cnkind)) THEN
01825                 DEALLOCATE(qs_env%dispersion_env%cnkind, stat=stat)
01826                 CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01827               END IF
01828               IF (ASSOCIATED(qs_env%dispersion_env%cnlist)) THEN
01829                 DO i=1,SIZE(qs_env%dispersion_env%cnlist)
01830                   DEALLOCATE(qs_env%dispersion_env%cnlist(i)%atom, stat=stat)
01831                   CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01832                 END DO
01833                 DEALLOCATE(qs_env%dispersion_env%cnlist, stat=stat)
01834                 CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01835               END IF
01836             END IF
01837             ! vdD-DF
01838             IF (ASSOCIATED(qs_env%dispersion_env%q_mesh)) THEN
01839                DEALLOCATE(qs_env%dispersion_env%q_mesh, stat=stat)
01840                CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01841             END IF
01842             IF (ASSOCIATED(qs_env%dispersion_env%kernel)) THEN
01843                DEALLOCATE(qs_env%dispersion_env%kernel, stat=stat)
01844                CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01845             END IF
01846             IF (ASSOCIATED(qs_env%dispersion_env%d2phi_dk2)) THEN
01847                DEALLOCATE(qs_env%dispersion_env%d2phi_dk2, stat=stat)
01848                CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01849             END IF
01850             IF (ASSOCIATED(qs_env%dispersion_env%d2y_dx2)) THEN
01851                DEALLOCATE(qs_env%dispersion_env%d2y_dx2, stat=stat)
01852                CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01853             END IF
01854 
01855             DEALLOCATE(qs_env%dispersion_env, stat=stat)
01856             CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01857           END IF
01858 
01859           IF( ASSOCIATED(qs_env%WannierCentres)) THEN
01860             DO i=1,SIZE(qs_env%WannierCentres)
01861               DEALLOCATE(qs_env%WannierCentres(i)%WannierHamDiag, stat=stat)
01862               CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01863               DEALLOCATE(qs_env%WannierCentres(i)%centres, stat=stat)
01864               CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01865             ENDDO
01866             DEALLOCATE(qs_env%WannierCentres, stat=stat)
01867             CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01868           ENDIF
01869           ! dereference atprop (we assume it will be deallocated in force_env!
01870           NULLIFY(qs_env%atprop)
01871           ! now we are ready to deallocate the full structure
01872           DEALLOCATE(qs_env, stat=stat)
01873           CPPostconditionNoFail(stat==0,cp_warning_level,routineP,error)
01874        END IF
01875     END IF
01876     NULLIFY(qs_env)
01877   END SUBROUTINE qs_env_release
01878 
01879 ! *****************************************************************************
01890   SUBROUTINE qs_env_reorthogonalize_vectors(qs_env, v_matrix, n_col,&
01891        error)
01892     TYPE(qs_environment_type), POINTER       :: qs_env
01893     TYPE(cp_fm_type), POINTER                :: v_matrix
01894     INTEGER, INTENT(in), OPTIONAL            :: n_col
01895     TYPE(cp_error_type), INTENT(inout)       :: error
01896 
01897     CHARACTER(len=*), PARAMETER :: 
01898       routineN = 'qs_env_reorthogonalize_vectors', 
01899       routineP = moduleN//':'//routineN
01900 
01901     INTEGER                                  :: handle, my_n_col
01902     LOGICAL                                  :: failure, has_unit_metric, 
01903                                                 ortho_contains_cholesky, 
01904                                                 smearing_is_used
01905     TYPE(cp_dbcsr_p_type), DIMENSION(:), 
01906       POINTER                                :: matrix_s
01907     TYPE(cp_fm_pool_type), POINTER           :: maxao_maxmo_fm_pool
01908     TYPE(qs_matrix_pools_type), POINTER      :: mpools
01909     TYPE(qs_scf_env_type), POINTER           :: scf_env
01910     TYPE(scf_control_type), POINTER          :: scf_control
01911 
01912     failure=.FALSE.
01913     NULLIFY(scf_env, scf_control, maxao_maxmo_fm_pool, matrix_s, mpools)
01914     CALL timeset(routineN,handle)
01915 
01916     CPPrecondition(ASSOCIATED(qs_env),cp_failure_level,routineP,error,failure)
01917     CPPrecondition(ASSOCIATED(v_matrix),cp_failure_level,routineP,error,failure)
01918 
01919     IF (.NOT. failure) THEN
01920 
01921        CALL cp_fm_get_info(v_matrix,ncol_global=my_n_col,error=error)
01922        IF (PRESENT(n_col)) my_n_col=n_col
01923        CALL get_qs_env(qs_env,mpools=mpools,&
01924             scf_env=scf_env,&
01925             scf_control=scf_control,&
01926             matrix_s=matrix_s,&
01927             error=error)
01928        CALL mpools_get(mpools,maxao_maxmo_fm_pool=maxao_maxmo_fm_pool,&
01929             error=error)
01930        IF (ASSOCIATED(scf_env)) THEN
01931           ortho_contains_cholesky=(scf_env%method /= ot_method_nr).AND.&
01932                (scf_env%cholesky_method>0 ).AND.&
01933                ASSOCIATED(scf_env%ortho)
01934        ELSE
01935           ortho_contains_cholesky=.FALSE.
01936        END IF
01937 
01938        CALL get_qs_env(qs_env,has_unit_metric=has_unit_metric,error=error)
01939        smearing_is_used = .FALSE.
01940        IF (qs_env%dft_control%smear) THEN
01941            smearing_is_used = .TRUE.
01942        END IF
01943 
01944 
01945        IF (has_unit_metric) THEN
01946           CALL make_basis_simple(v_matrix,my_n_col,error=error)
01947        ELSE IF (smearing_is_used) THEN
01948           CALL make_basis_lowdin(vmatrix=v_matrix,ncol=my_n_col,&
01949                  matrix_s=matrix_s(1)%matrix,error=error)
01950        ELSE IF (ortho_contains_cholesky) THEN
01951           CALL make_basis_cholesky(vmatrix=v_matrix,ncol=my_n_col,&
01952                ortho=scf_env%ortho,error=error)
01953        ELSE
01954           CALL make_basis_sm(v_matrix,my_n_col, matrix_s(1)%matrix ,error=error)
01955        END IF
01956     END IF
01957     CALL timestop(handle)
01958   END SUBROUTINE qs_env_reorthogonalize_vectors
01959 
01960 END MODULE qs_environment_types