(git:3f0d10b)
Loading...
Searching...
No Matches
qs_matrix_pools.F
Go to the documentation of this file.
1!--------------------------------------------------------------------------------------------------!
2! CP2K: A general program to perform molecular dynamics simulations !
3! Copyright 2000-2026 CP2K developers group <https://cp2k.org> !
4! !
5! SPDX-License-Identifier: GPL-2.0-or-later !
6!--------------------------------------------------------------------------------------------------!
7
8! **************************************************************************************************
9!> \brief wrapper for the pools of matrixes
10!> \par History
11!> 05.2003 created [fawzi]
12!> \author fawzi
13! **************************************************************************************************
27 USE qs_mo_types, ONLY: get_mo_set,&
29#include "./base/base_uses.f90"
30
31 IMPLICIT NONE
32 PRIVATE
33
34 LOGICAL, PRIVATE, PARAMETER :: debug_this_module = .true.
35 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_matrix_pools'
36
37 PUBLIC :: qs_matrix_pools_type
38 PUBLIC :: mpools_release, mpools_get, &
40
41! **************************************************************************************************
42!> \brief container for the pools of matrixes used by qs
43!> \param ao_mo_fm_pools pools with (ao x mo) full matrixes (same order as
44!> c).
45!> \param ao_ao_fm_pool pools with (ao x ao) full matrixes (same order as
46!> c).
47!> \param mo_mo_fm_pools pools with (mo x mo) full matrixes (same
48!> order as c).
49!> \param ao_mosub_fm_pools pools with (ao x mosub) full matrixes, where mosub
50!> are a subset of the mos
51!> \param mosub_mosub_fm_pools pools with (mosub x mosub) full matrixes, where mosub
52!> are a subset of the mos
53!>
54!> \param maxao_maxao_fm_pools pool of matrixes big enough to accommodate any
55!> aoxao matrix (useful for temp matrixes)
56!> \param maxao_maxmo_fm_pools pool of matrixes big enough to accommodate any
57!> aoxmo matrix (useful for temp matrixes)
58!> \param maxmo_maxmo_fm_pools pool of matrixes big enough to accommodate any
59!> moxmo matrix (useful for temp matrixes)
60!> \par History
61!> 04.2003 created [fawzi]
62!> \author fawzi
63! **************************************************************************************************
65 TYPE(cp_fm_pool_p_type), DIMENSION(:), POINTER :: ao_mo_fm_pools => null(), &
66 mo_mo_fm_pools => null()
67 TYPE(cp_fm_pool_type), POINTER :: ao_ao_fm_pool => null()
68 TYPE(cp_fm_pool_p_type), DIMENSION(:), POINTER :: ao_mosub_fm_pools => null(), &
69 mosub_mosub_fm_pools => null()
71
72CONTAINS
73
74! **************************************************************************************************
75!> \brief releases the given mpools
76!> \param mpools the matrix pools type to release
77!> \par History
78!> 04.2003 created [fawzi]
79!> \author fawzi
80! **************************************************************************************************
81 SUBROUTINE mpools_release(mpools)
82 TYPE(qs_matrix_pools_type), POINTER :: mpools
83
84 IF (ASSOCIATED(mpools)) THEN
85 CALL fm_pools_dealloc(mpools%ao_mo_fm_pools)
86 CALL fm_pool_release(mpools%ao_ao_fm_pool)
87 CALL fm_pools_dealloc(mpools%mo_mo_fm_pools)
88 IF (ASSOCIATED(mpools%ao_mosub_fm_pools)) THEN
89 CALL fm_pools_dealloc(mpools%ao_mosub_fm_pools)
90 END IF
91 IF (ASSOCIATED(mpools%mosub_mosub_fm_pools)) THEN
92 CALL fm_pools_dealloc(mpools%mosub_mosub_fm_pools)
93 END IF
94 DEALLOCATE (mpools)
95 END IF
96 NULLIFY (mpools)
97 END SUBROUTINE mpools_release
98
99! **************************************************************************************************
100!> \brief returns various attributes of the mpools (notably the pools
101!> contained in it)
102!> \param mpools the matrix pools object you want info about
103!> \param ao_mo_fm_pools ...
104!> \param ao_ao_fm_pool ...
105!> \param mo_mo_fm_pools ...
106!> \param ao_mosub_fm_pools ...
107!> \param mosub_mosub_fm_pools ...
108!> \param maxao_maxmo_fm_pool ...
109!> \param maxao_maxao_fm_pool ...
110!> \param maxmo_maxmo_fm_pool ...
111!> \par History
112!> 04.2003 created [fawzi]
113!> \author fawzi
114! **************************************************************************************************
115 SUBROUTINE mpools_get(mpools, ao_mo_fm_pools, ao_ao_fm_pool, &
116 mo_mo_fm_pools, ao_mosub_fm_pools, mosub_mosub_fm_pools, &
117 maxao_maxmo_fm_pool, maxao_maxao_fm_pool, maxmo_maxmo_fm_pool)
118 TYPE(qs_matrix_pools_type), INTENT(IN) :: mpools
119 TYPE(cp_fm_pool_p_type), DIMENSION(:), OPTIONAL, &
120 POINTER :: ao_mo_fm_pools
121 TYPE(cp_fm_pool_type), OPTIONAL, POINTER :: ao_ao_fm_pool
122 TYPE(cp_fm_pool_p_type), DIMENSION(:), OPTIONAL, &
123 POINTER :: mo_mo_fm_pools, ao_mosub_fm_pools, &
124 mosub_mosub_fm_pools
125 TYPE(cp_fm_pool_type), OPTIONAL, POINTER :: maxao_maxmo_fm_pool, &
126 maxao_maxao_fm_pool, &
127 maxmo_maxmo_fm_pool
128
129 IF (PRESENT(ao_mo_fm_pools)) ao_mo_fm_pools => mpools%ao_mo_fm_pools
130 IF (PRESENT(maxao_maxmo_fm_pool)) THEN
131 IF (ASSOCIATED(mpools%ao_mo_fm_pools)) THEN
132 maxao_maxmo_fm_pool => mpools%ao_mo_fm_pools(1)%pool
133 ELSE
134 NULLIFY (maxao_maxmo_fm_pool) ! raise an error?
135 END IF
136 END IF
137 IF (PRESENT(ao_ao_fm_pool)) ao_ao_fm_pool => mpools%ao_ao_fm_pool
138 IF (PRESENT(maxao_maxao_fm_pool)) THEN
139 IF (ASSOCIATED(mpools%ao_ao_fm_pool)) THEN
140 maxao_maxao_fm_pool => mpools%ao_ao_fm_pool
141 ELSE
142 NULLIFY (maxao_maxao_fm_pool) ! raise an error?
143 END IF
144 END IF
145 IF (PRESENT(mo_mo_fm_pools)) mo_mo_fm_pools => mpools%mo_mo_fm_pools
146 IF (PRESENT(maxmo_maxmo_fm_pool)) THEN
147 IF (ASSOCIATED(mpools%mo_mo_fm_pools)) THEN
148 maxmo_maxmo_fm_pool => mpools%mo_mo_fm_pools(1)%pool
149 ELSE
150 NULLIFY (maxmo_maxmo_fm_pool) ! raise an error?
151 END IF
152 END IF
153 IF (PRESENT(ao_mosub_fm_pools)) ao_mosub_fm_pools => mpools%ao_mosub_fm_pools
154 IF (PRESENT(mosub_mosub_fm_pools)) mosub_mosub_fm_pools => mpools%mosub_mosub_fm_pools
155 END SUBROUTINE mpools_get
156
157! **************************************************************************************************
158!> \brief creates a mpools
159!> \param mpools the mpools to create
160!> \par History
161!> 04.2003 created [fawzi]
162!> \author fawzi
163! **************************************************************************************************
164 SUBROUTINE mpools_create(mpools)
165 TYPE(qs_matrix_pools_type), POINTER :: mpools
166
167 ALLOCATE (mpools)
168 NULLIFY (mpools%ao_ao_fm_pool, mpools%ao_mo_fm_pools, &
169 mpools%mo_mo_fm_pools, mpools%ao_mosub_fm_pools, &
170 mpools%mosub_mosub_fm_pools)
171 END SUBROUTINE mpools_create
172
173! **************************************************************************************************
174!> \brief rebuilds the pools of the (ao x mo, ao x ao , mo x mo) full matrixes
175!> \param mpools the environment where the pools should be rebuilt
176!> \param mos the molecular orbitals (qs_env%c), must contain up to
177!> date nmo and nao
178!> \param blacs_env the blacs environment of the full matrixes
179!> \param para_env the parallel environment of the matrixes
180!> \param nmosub number of the orbitals for the creation
181!> of the pools containing only a subset of mos (OPTIONAL)
182!> \par History
183!> 08.2002 created [fawzi]
184!> 04.2005 added pools for a subset of mos [MI]
185!> \author Fawzi Mohamed
186! **************************************************************************************************
187 SUBROUTINE mpools_rebuild_fm_pools(mpools, mos, blacs_env, para_env, &
188 nmosub)
189 TYPE(qs_matrix_pools_type), POINTER :: mpools
190 TYPE(mo_set_type), DIMENSION(:), INTENT(IN) :: mos
191 TYPE(cp_blacs_env_type), POINTER :: blacs_env
192 TYPE(mp_para_env_type), POINTER :: para_env
193 INTEGER, DIMENSION(2), INTENT(IN), OPTIONAL :: nmosub
194
195 CHARACTER(len=*), PARAMETER :: routinen = 'mpools_rebuild_fm_pools'
196
197 INTEGER :: handle, ispin, max_nmo, min_nmo, nao, &
198 ncg, nmo, nrg, nspins
199 LOGICAL :: prepare_subset, should_rebuild
200 TYPE(cp_fm_pool_type), POINTER :: p_att
201 TYPE(cp_fm_struct_type), POINTER :: fmstruct
202
203 CALL timeset(routinen, handle)
204
205 NULLIFY (fmstruct, p_att)
206 prepare_subset = .false.
207 IF (PRESENT(nmosub)) THEN
208 IF (nmosub(1) > 0) prepare_subset = .true.
209 END IF
210
211 IF (.NOT. ASSOCIATED(mpools)) THEN
212 CALL mpools_create(mpools)
213 END IF
214 nspins = SIZE(mos)
215
216 IF (ASSOCIATED(mpools%ao_mo_fm_pools)) THEN
217 IF (nspins /= SIZE(mpools%ao_mo_fm_pools)) THEN
218 CALL fm_pools_dealloc(mpools%ao_mo_fm_pools)
219 END IF
220 END IF
221 IF (.NOT. ASSOCIATED(mpools%ao_mo_fm_pools)) THEN
222 ALLOCATE (mpools%ao_mo_fm_pools(nspins))
223 DO ispin = 1, nspins
224 NULLIFY (mpools%ao_mo_fm_pools(ispin)%pool)
225 END DO
226 END IF
227
228 IF (ASSOCIATED(mpools%ao_ao_fm_pool)) THEN
229 CALL fm_pool_release(mpools%ao_ao_fm_pool)
230 END IF
231 IF (.NOT. ASSOCIATED(mpools%ao_ao_fm_pool)) THEN
232 NULLIFY (mpools%ao_ao_fm_pool)
233 END IF
234
235 IF (ASSOCIATED(mpools%mo_mo_fm_pools)) THEN
236 IF (nspins /= SIZE(mpools%mo_mo_fm_pools)) THEN
237 CALL fm_pools_dealloc(mpools%mo_mo_fm_pools)
238 END IF
239 END IF
240 IF (.NOT. ASSOCIATED(mpools%mo_mo_fm_pools)) THEN
241 ALLOCATE (mpools%mo_mo_fm_pools(nspins))
242 DO ispin = 1, nspins
243 NULLIFY (mpools%mo_mo_fm_pools(ispin)%pool)
244 END DO
245 END IF
246
247 IF (prepare_subset) THEN
248
249 IF (ASSOCIATED(mpools%ao_mosub_fm_pools)) THEN
250 IF (nspins /= SIZE(mpools%ao_mosub_fm_pools)) THEN
251 CALL fm_pools_dealloc(mpools%ao_mosub_fm_pools)
252 END IF
253 END IF
254 IF (.NOT. ASSOCIATED(mpools%ao_mosub_fm_pools)) THEN
255 ALLOCATE (mpools%ao_mosub_fm_pools(nspins))
256 DO ispin = 1, nspins
257 NULLIFY (mpools%ao_mosub_fm_pools(ispin)%pool)
258 END DO
259 END IF
260
261 IF (ASSOCIATED(mpools%mosub_mosub_fm_pools)) THEN
262 IF (nspins /= SIZE(mpools%mosub_mosub_fm_pools)) THEN
263 CALL fm_pools_dealloc(mpools%mosub_mosub_fm_pools)
264 END IF
265 END IF
266 IF (.NOT. ASSOCIATED(mpools%mosub_mosub_fm_pools)) THEN
267 ALLOCATE (mpools%mosub_mosub_fm_pools(nspins))
268 DO ispin = 1, nspins
269 NULLIFY (mpools%mosub_mosub_fm_pools(ispin)%pool)
270 END DO
271 END IF
272
273 END IF ! prepare_subset
274
275 CALL get_mo_set(mos(1), nao=nao, nmo=min_nmo)
276 max_nmo = min_nmo
277 DO ispin = 2, SIZE(mos)
278 CALL get_mo_set(mos(ispin), nmo=nmo)
279 IF (max_nmo < nmo) THEN
280 cpabort("the mo with the most orbitals must be the first ")
281 END IF
282 min_nmo = min(min_nmo, nmo)
283 END DO
284
285 ! aoao pools
286 should_rebuild = .false.
287 DO ispin = 1, nspins
288 p_att => mpools%ao_ao_fm_pool
289 should_rebuild = (should_rebuild .OR. (.NOT. ASSOCIATED(p_att)))
290 IF (.NOT. should_rebuild) THEN
291 fmstruct => fm_pool_get_el_struct(mpools%ao_ao_fm_pool)
292 CALL cp_fm_struct_get(fmstruct, nrow_global=nrg, ncol_global=ncg)
293 CALL get_mo_set(mos(1), nao=nao, nmo=nmo)
294 should_rebuild = nao /= nrg .OR. nao /= ncg
295 END IF
296 END DO
297 IF (should_rebuild) THEN
298 CALL fm_pool_release(mpools%ao_ao_fm_pool)
299
300 CALL cp_fm_struct_create(fmstruct, nrow_global=nao, &
301 ncol_global=nao, para_env=para_env, &
302 context=blacs_env)
303 CALL fm_pool_create(mpools%ao_ao_fm_pool, fmstruct)
304 CALL cp_fm_struct_release(fmstruct)
305 END IF
306
307 ! aomo pools
308 should_rebuild = .false.
309 DO ispin = 1, nspins
310 p_att => mpools%ao_mo_fm_pools(ispin)%pool
311 should_rebuild = (should_rebuild .OR. (.NOT. ASSOCIATED(p_att)))
312 IF (.NOT. should_rebuild) THEN
313 fmstruct => fm_pool_get_el_struct(mpools%ao_mo_fm_pools(ispin) &
314 %pool)
315 CALL cp_fm_struct_get(fmstruct, nrow_global=nrg, ncol_global=ncg)
316 CALL get_mo_set(mos(1), nao=nao, nmo=nmo)
317 should_rebuild = nao /= nrg .OR. nmo /= ncg
318 END IF
319 END DO
320 IF (should_rebuild) THEN
321 DO ispin = 1, nspins
322 CALL fm_pool_release(mpools%ao_mo_fm_pools(ispin)%pool)
323 END DO
324
325 IF (max_nmo == min_nmo) THEN
326 CALL cp_fm_struct_create(fmstruct, nrow_global=nao, &
327 ncol_global=max_nmo, para_env=para_env, &
328 context=blacs_env)
329 DO ispin = 1, SIZE(mos)
330 CALL fm_pool_create(mpools%ao_mo_fm_pools(ispin)%pool, fmstruct)
331 END DO
332 CALL cp_fm_struct_release(fmstruct)
333 ELSE
334 DO ispin = 1, SIZE(mos)
335 CALL get_mo_set(mos(ispin), nmo=nmo, nao=nao)
336 CALL cp_fm_struct_create(fmstruct, nrow_global=nao, &
337 ncol_global=nmo, para_env=para_env, &
338 context=blacs_env)
339 CALL fm_pool_create(mpools%ao_mo_fm_pools(ispin)%pool, &
340 fmstruct)
341 CALL cp_fm_struct_release(fmstruct)
342 END DO
343 END IF
344 END IF
345
346 ! momo pools
347 should_rebuild = .false.
348 DO ispin = 1, nspins
349 p_att => mpools%mo_mo_fm_pools(ispin)%pool
350 should_rebuild = (should_rebuild .OR. (.NOT. ASSOCIATED(p_att)))
351 IF (.NOT. should_rebuild) THEN
352 fmstruct => fm_pool_get_el_struct(p_att)
353 CALL cp_fm_struct_get(fmstruct, nrow_global=nrg, &
354 ncol_global=ncg)
355 CALL get_mo_set(mos(1), nao=nao, nmo=nmo)
356 should_rebuild = nmo /= nrg .OR. nmo /= ncg
357 END IF
358 END DO
359 IF (should_rebuild) THEN
360 DO ispin = 1, nspins
361 CALL fm_pool_release(mpools%mo_mo_fm_pools(ispin)%pool)
362 END DO
363
364 IF (max_nmo == min_nmo) THEN
365 CALL cp_fm_struct_create(fmstruct, nrow_global=max_nmo, &
366 ncol_global=max_nmo, para_env=para_env, &
367 context=blacs_env)
368 DO ispin = 1, SIZE(mos)
369 CALL fm_pool_create(mpools%mo_mo_fm_pools(ispin)%pool, &
370 fmstruct)
371 END DO
372 CALL cp_fm_struct_release(fmstruct)
373 ELSE
374 DO ispin = 1, SIZE(mos)
375 NULLIFY (mpools%mo_mo_fm_pools(ispin)%pool)
376 CALL get_mo_set(mos(ispin), nmo=nmo, nao=nao)
377 CALL cp_fm_struct_create(fmstruct, nrow_global=nmo, &
378 ncol_global=nmo, para_env=para_env, &
379 context=blacs_env)
380 CALL fm_pool_create(mpools%mo_mo_fm_pools(ispin)%pool, &
381 fmstruct)
382 CALL cp_fm_struct_release(fmstruct)
383 END DO
384 END IF
385 END IF
386
387 IF (prepare_subset) THEN
388 ! aomosub pools
389 should_rebuild = .false.
390 DO ispin = 1, nspins
391 p_att => mpools%ao_mosub_fm_pools(ispin)%pool
392 should_rebuild = (should_rebuild .OR. (.NOT. ASSOCIATED(p_att)))
393 IF (.NOT. should_rebuild) THEN
394 fmstruct => fm_pool_get_el_struct(mpools%ao_mosub_fm_pools(ispin) &
395 %pool)
396 CALL cp_fm_struct_get(fmstruct, nrow_global=nrg, &
397 ncol_global=ncg)
398 CALL get_mo_set(mos(1), nao=nao)
399 should_rebuild = nao /= nrg .OR. nmosub(ispin) /= ncg
400 END IF
401 END DO
402 IF (should_rebuild) THEN
403 DO ispin = 1, nspins
404 CALL fm_pool_release(mpools%ao_mosub_fm_pools(ispin)%pool)
405 END DO
406
407 IF (nspins == 1 .OR. nmosub(1) == nmosub(2)) THEN
408 CALL cp_fm_struct_create(fmstruct, nrow_global=nao, &
409 ncol_global=nmosub(1), para_env=para_env, &
410 context=blacs_env)
411 DO ispin = 1, SIZE(mos)
412 CALL fm_pool_create(mpools%ao_mosub_fm_pools(ispin)%pool, fmstruct)
413 END DO
414 CALL cp_fm_struct_release(fmstruct)
415 ELSE
416 DO ispin = 1, SIZE(mos)
417 CALL get_mo_set(mos(ispin), nao=nao)
418 CALL cp_fm_struct_create(fmstruct, nrow_global=nao, &
419 ncol_global=nmosub(1), para_env=para_env, &
420 context=blacs_env)
421 CALL fm_pool_create(mpools%ao_mosub_fm_pools(ispin)%pool, &
422 fmstruct)
423 CALL cp_fm_struct_release(fmstruct)
424 END DO
425 END IF
426 END IF ! should_rebuild
427
428 ! mosubmosub pools
429 should_rebuild = .false.
430 DO ispin = 1, nspins
431 p_att => mpools%mosub_mosub_fm_pools(ispin)%pool
432 should_rebuild = (should_rebuild .OR. (.NOT. ASSOCIATED(p_att)))
433 IF (.NOT. should_rebuild) THEN
434 fmstruct => fm_pool_get_el_struct(p_att)
435 CALL cp_fm_struct_get(fmstruct, nrow_global=nrg, &
436 ncol_global=ncg)
437 should_rebuild = nmosub(ispin) /= nrg .OR. nmosub(ispin) /= ncg
438 END IF
439 END DO
440 IF (should_rebuild) THEN
441 DO ispin = 1, nspins
442 CALL fm_pool_release(mpools%mosub_mosub_fm_pools(ispin)%pool)
443 END DO
444
445 IF (nspins == 1 .OR. nmosub(1) == nmosub(2)) THEN
446 CALL cp_fm_struct_create(fmstruct, nrow_global=nmosub(1), &
447 ncol_global=nmosub(1), para_env=para_env, &
448 context=blacs_env)
449 DO ispin = 1, SIZE(mos)
450 CALL fm_pool_create(mpools%mosub_mosub_fm_pools(ispin)%pool, &
451 fmstruct)
452 END DO
453 CALL cp_fm_struct_release(fmstruct)
454 ELSE
455 DO ispin = 1, SIZE(mos)
456 NULLIFY (mpools%mosub_mosub_fm_pools(ispin)%pool)
457 CALL cp_fm_struct_create(fmstruct, nrow_global=nmosub(ispin), &
458 ncol_global=nmosub(ispin), para_env=para_env, &
459 context=blacs_env)
460 CALL fm_pool_create(mpools%mosub_mosub_fm_pools(ispin)%pool, &
461 fmstruct)
462 CALL cp_fm_struct_release(fmstruct)
463 END DO
464 END IF
465 END IF ! should_rebuild
466 END IF ! prepare_subset
467
468 CALL timestop(handle)
469 END SUBROUTINE mpools_rebuild_fm_pools
470
471! **************************************************************************************************
472
473END MODULE qs_matrix_pools
methods related to the blacs parallel environment
pool for for elements that are retained and released
subroutine, public fm_pool_create(pool, el_struct)
creates a pool of elements
subroutine, public fm_pool_release(pool)
releases the given pool (see cp2k/doc/ReferenceCounting.html)
subroutine, public fm_pools_dealloc(pools)
deallocate an array of pools (releasing each pool)
type(cp_fm_struct_type) function, pointer, public fm_pool_get_el_struct(pool)
returns the structure of the elements in this pool
represent the structure of a full matrix
subroutine, public cp_fm_struct_create(fmstruct, para_env, context, nrow_global, ncol_global, nrow_block, ncol_block, descriptor, first_p_pos, local_leading_dimension, template_fmstruct, square_blocks, force_block)
allocates and initializes a full matrix structure
subroutine, public cp_fm_struct_get(fmstruct, para_env, context, descriptor, ncol_block, nrow_block, nrow_global, ncol_global, first_p_pos, row_indices, col_indices, nrow_local, ncol_local, nrow_locals, ncol_locals, local_leading_dimension)
returns the values of various attributes of the matrix structure
subroutine, public cp_fm_struct_release(fmstruct)
releases a full matrix structure
Interface to the message passing library MPI.
wrapper for the pools of matrixes
subroutine, public mpools_get(mpools, ao_mo_fm_pools, ao_ao_fm_pool, mo_mo_fm_pools, ao_mosub_fm_pools, mosub_mosub_fm_pools, maxao_maxmo_fm_pool, maxao_maxao_fm_pool, maxmo_maxmo_fm_pool)
returns various attributes of the mpools (notably the pools contained in it)
subroutine, public mpools_create(mpools)
creates a mpools
subroutine, public mpools_release(mpools)
releases the given mpools
subroutine, public mpools_rebuild_fm_pools(mpools, mos, blacs_env, para_env, nmosub)
rebuilds the pools of the (ao x mo, ao x ao , mo x mo) full matrixes
Definition and initialisation of the mo data type.
Definition qs_mo_types.F:22
subroutine, public get_mo_set(mo_set, maxocc, homo, lfomo, nao, nelectron, n_el_f, nmo, eigenvalues, occupation_numbers, mo_coeff, mo_coeff_b, uniform_occupation, kts, mu, flexible_electron_count, cmo_coeff)
Get the components of a MO set data structure.
represent a blacs multidimensional parallel environment (for the mpi corrispective see cp_paratypes/m...
represent a pool of elements with the same structure
keeps the information about the structure of a full matrix
stores all the informations relevant to an mpi environment
container for the pools of matrixes used by qs