68 SUBROUTINE negf_sub_env_create(sub_env, negf_control, blacs_env_global, blacs_grid_layout, blacs_repeatable)
72 INTEGER,
INTENT(in) :: blacs_grid_layout
73 LOGICAL,
INTENT(in) :: blacs_repeatable
75 CHARACTER(LEN=*),
PARAMETER :: routinen =
'negf_sub_env_create'
81 CALL timeset(routinen, handle)
83 CALL blacs_env_global%get(para_env=para_env_global)
84 sub_env%mepos_global = para_env_global%mepos
85 sub_env%mpi_comm_global = para_env_global
90 is_split = negf_control%nprocs > 0 .AND. negf_control%nprocs*2 <= para_env_global%num_pe
93 ALLOCATE (sub_env%group_distribution(0:para_env_global%num_pe - 1))
95 ALLOCATE (sub_env%para_env)
96 CALL sub_env%para_env%from_split(comm=para_env_global, ngroups=sub_env%ngroups, &
97 group_distribution=sub_env%group_distribution, subgroup_min_size=negf_control%nprocs)
100 NULLIFY (sub_env%blacs_env)
104 CALL cp_blacs_env_create(sub_env%blacs_env, sub_env%para_env, blacs_grid_layout, blacs_repeatable)
106 sub_env%para_env => para_env_global
109 ALLOCATE (sub_env%group_distribution(0:para_env_global%num_pe - 1))
110 sub_env%group_distribution(:) = 0
112 sub_env%blacs_env => blacs_env_global
113 CALL sub_env%blacs_env%retain()
115 sub_env%para_env => para_env_global
116 CALL sub_env%para_env%retain()
119 CALL timestop(handle)
subroutine, public cp_blacs_env_create(blacs_env, para_env, blacs_grid_layout, blacs_repeatable, row_major, grid_2d)
allocates and initializes a type that represent a blacs context
subroutine, public negf_sub_env_create(sub_env, negf_control, blacs_env_global, blacs_grid_layout, blacs_repeatable)
Split MPI communicator to create a set of parallel (sub)groups.