Size: 3948
Comment:
|
Size: 4905
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 19: | Line 19: |
* in messy_clamsmix.f90 | * in messy_clamsmix.f90 |
Line 77: | Line 77: |
* Wenn mehr CPUs als Level genutzt werden, bearbeiten die ersten nthetas CPUs jeweils ein Level, die weiteren bleiben ungenutzt | |
Line 101: | Line 102: |
* Jede PE schreibt die Daten, die von ihr selbst bearbeitet werden, zuerst auf outfield * Jede PE empfängt von allen anderen die Punkte, die auf den von der PE zu bearbeitenden Leveln liegen, und hängt diese an outfield an * Jede PE sendet an alle anderen PEs die Punkte, die auf den von dieser zu bearbeitenden Leveln liegen * Falls Unterintervalle für mix gewählt wurden (nintervals>1) müssen noch Punkte aus den Grenzbereichen ausgetauscht werden. Diese werden jeweils auf zwei aufeinanderfolgenden PEs benötigt: <<BR>> Von der vorhergehenden PE müssen die Punkte zwischen theta_min_act und l_min_act noch geholt werden. Von der nachfolgenden PE müssen die Punkte zwischen l_max_act und theta_max_act noch geholt werden. * setze die aktuelle Anzahl Punkte auf der jeweiligen PE ->my_nparts |
messy_clamsmix_si.f90
sub. clamsmix_global_end
clamsmix_set_config
SUBROUTINE clamsmix_set_config
- in messy_clamsmix.f90
- Setze von mix benötigte Variablen:
- adapt_par, time_step, nthetas, l_nthetas, theta_min, theta_max
clamsmix_set_bounds
SUBROUTINE clamsmix_set_bounds
- in messy_clamsmix.f90
- Setze die Grenzen für jedes Level:
- theta_min_act, theta_max_act, theta_delta_act, l_min_act, l_max_act, l_delta_act
clamsmix_sort
SUBROUTINE clamsmix_sort (status, level, indarr, irange)
- Indexsortierung des Levels (ZETA)
- Variablen
status
integer
OUT
Fehlercode
level
real(prec)
(dnparts)
IN
Level (ZETA-Werte)
indarr
integer
(dnparts)
OUT
sortierter Index von levelind
irange
integer
(2,l_nthetas,0:ntasks-1)
OUT
Start- und Endposition jedes Levels im sortierten Feld
irange(1,i,k): Erster Punkt auf Level i in levelind(indarr) auf PE k
irange(2,i,k): Letzter Punkt auf Level i in levelind(indarr) auf PE klevelind
integer
(dnparts)
LOKAL
Index der ZETA-Werte in ZETA-Grid
Ermittle zu jedem ZETA-Wert den Index im ZETA-Grid -> levelind
Indexsortierung des Feldes levelind -> indarr
Ermittle den ersten und letzten Punkt jedes Levels in levelind(indarr) -> irange
ipart 1 2 3 4 5 6 7 8 9 level 320 330 325 340 322 331 332 342 mdi levelind 1 2 1 3 1 2 2 3 9999 indarr 1 3 5 2 6 7 4 8 9 levelind 1 1 1 2 2 2 3 3 9999 (indarr) irange (1,3) (4,6) (7,8)
clamsmix_nparts_per_level
SUBROUTINE clamsmix_nparts_per_level (irange, dnparts_level, nparts_level)
- in messy_clamsmix.f90
- Ermittle die Anzahl Punkte pro Level
- Parameter:
irange
integer
(2,l_nthetas,0:ntasks-1)
IN
Start- und Endposition jedes Levels für jede PE
dnparts_level
integer
(l_nthetas,0:ntasks-1)
OUT
Anzahl Punkte pro Level für jede PE
nparts_level
integer
(l_nthetas)
OUT
Anzahl Punkte pro Level auf allen PEs
clamsmix_set_level
SUBROUTINE clamsmix_set_level (levelrange, nparts_level)
- in messy_clamsmix.f90
- Ermittle für jede PE, welche Level bearbeitet werden
- Wenn mehr CPUs als Level genutzt werden, bearbeiten die ersten nthetas CPUs jeweils ein Level, die weiteren bleiben ungenutzt
- Parameter:
nparts_level
integer
(l_nthetas)
IN
Anzahl Punkte pro Level auf allen PEs
levelrange
integer
(2,0:ntasks-1)
OUT
Start- und Endlevel für jede PE
clamsmix_shuffle
SUBROUTINE clamsmix_shuffle (status, my_nparts, indarr, irange, levelrange, & dnparts_level, nparts_level, level, infield, outfield)
- Umsortierung der Punkte:
- Jede PE bekommt alle Punkte, deren Level zwischen levelrange(1,irank) and levelrange(2,irank) liegt
- Parameter
status
integer
OUT
Fehlercode
my_nparts
integer
OUT
neue Anzahl Punkte auf aktueller PE
indarr
integer
(dnparts)
IN
irange
integer
(2,l_nthetas,0:ntasks-1)
IN
levelrange
integer
(2,0:ntasks-1)
IN
dnparts_level
integer
(l_nthetas,0:ntasks-1)
IN
nparts_level
integer
(l_nthetas)
IN
level
real(prec)
(dnparts_max)
IN
Level (ZETA-Werte)
infield
real(prec)
(dnparts_max)
IN
Umzuordnender Parameter
outfield
real(prec)
(dnparts_max)
OUT
Umgeordneter Parameter
- Jede PE schreibt die Daten, die von ihr selbst bearbeitet werden, zuerst auf outfield
- Jede PE empfängt von allen anderen die Punkte, die auf den von der PE zu bearbeitenden Leveln liegen, und hängt diese an outfield an
- Jede PE sendet an alle anderen PEs die Punkte, die auf den von dieser zu bearbeitenden Leveln liegen
Falls Unterintervalle für mix gewählt wurden (nintervals>1) müssen noch Punkte aus den Grenzbereichen ausgetauscht werden. Diese werden jeweils auf zwei aufeinanderfolgenden PEs benötigt:
Von der vorhergehenden PE müssen die Punkte zwischen theta_min_act und l_min_act noch geholt werden. Von der nachfolgenden PE müssen die Punkte zwischen l_max_act und theta_max_act noch geholt werden.setze die aktuelle Anzahl Punkte auf der jeweiligen PE ->my_nparts
- Umsortierung der Punkte:
mix
- Punkte wieder gleichmäßig auf CPUs verteilen