| Directory: | ./ |
|---|---|
| File: | dyn/groupeun.f |
| Date: | 2022-01-11 19:19:34 |
| Exec | Total | Coverage | |
|---|---|---|---|
| Lines: | 58 | 58 | 100.0% |
| Branches: | 76 | 98 | 77.6% |
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | ! | ||
| 2 | ! $Header$ | ||
| 3 | ! | ||
| 4 | 960 | SUBROUTINE groupeun(jjmax,llmax,q) | |
| 5 | |||
| 6 | USE comconst_mod, ONLY: ngroup | ||
| 7 | |||
| 8 | IMPLICIT NONE | ||
| 9 | |||
| 10 | include "dimensions.h" | ||
| 11 | include "paramet.h" | ||
| 12 | include "comgeom2.h" | ||
| 13 | |||
| 14 | INTEGER jjmax,llmax | ||
| 15 | REAL q(iip1,jjmax,llmax) | ||
| 16 | |||
| 17 | ! INTEGER ngroup | ||
| 18 | ! PARAMETER (ngroup=3) | ||
| 19 | |||
| 20 | REAL airecn,qn | ||
| 21 | REAL airecs,qs | ||
| 22 | |||
| 23 | INTEGER i,j,l,ig,ig2,j1,j2,i0,jd | ||
| 24 | |||
| 25 | c--------------------------------------------------------------------c | ||
| 26 | c Strategie d'optimisation c | ||
| 27 | c stocker les valeurs systematiquement recalculees c | ||
| 28 | c et identiques d'un pas de temps sur l'autre. Il s'agit des c | ||
| 29 | c aires des cellules qui sont sommees. S'il n'y a pas de changement c | ||
| 30 | c de grille au cours de la simulation tout devrait bien se passer. c | ||
| 31 | c Autre optimisation : determination des bornes entre lesquelles "j" c | ||
| 32 | c varie, au lieu de faire un test à chaque fois... | ||
| 33 | c--------------------------------------------------------------------c | ||
| 34 | |||
| 35 | INTEGER j_start, j_finish | ||
| 36 | |||
| 37 | REAL, SAVE :: airen_tab(iip1,jjp1,0:1) | ||
| 38 | REAL, SAVE :: aires_tab(iip1,jjp1,0:1) | ||
| 39 | |||
| 40 | LOGICAL, SAVE :: first = .TRUE. | ||
| 41 | ! INTEGER,SAVE :: i_index(iim,ngroup) | ||
| 42 | INTEGER :: offset | ||
| 43 | ! REAL :: qsum(iim/ngroup) | ||
| 44 | |||
| 45 |
2/2✓ Branch 0 taken 1 times.
✓ Branch 1 taken 959 times.
|
960 | IF (first) THEN |
| 46 | 1 | CALL INIT_GROUPEUN(airen_tab, aires_tab) | |
| 47 | 1 | first = .FALSE. | |
| 48 | ENDIF | ||
| 49 | |||
| 50 | |||
| 51 | c Champs 3D | ||
| 52 | 960 | jd=jjp1-jjmax | |
| 53 | c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) | ||
| 54 |
2/2✓ Branch 0 taken 37440 times.
✓ Branch 1 taken 960 times.
|
38400 | DO l=1,llm |
| 55 | 37440 | j1=1+jd | |
| 56 | j2=2 | ||
| 57 |
2/2✓ Branch 0 taken 112320 times.
✓ Branch 1 taken 37440 times.
|
150720 | DO ig=1,ngroup |
| 58 | |||
| 59 | c Concerne le pole nord | ||
| 60 | 112320 | j_start = j1-jd | |
| 61 | 112320 | j_finish = j2-jd | |
| 62 |
2/2✓ Branch 0 taken 112320 times.
✓ Branch 1 taken 224640 times.
|
336960 | DO ig2=1,ngroup-ig+1 |
| 63 |
1/2✓ Branch 0 taken 224640 times.
✗ Branch 1 not taken.
|
224640 | offset=2**(ig2-1) |
| 64 |
2/2✓ Branch 0 taken 468000 times.
✓ Branch 1 taken 224640 times.
|
804960 | DO j=j_start, j_finish |
| 65 | !CDIR NODEP | ||
| 66 | !CDIR ON_ADB(q) | ||
| 67 |
2/4✓ Branch 0 taken 468000 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 468000 times.
✗ Branch 3 not taken.
|
692640 | DO i0=1,iim,2**ig2 |
| 68 |
2/2✓ Branch 0 taken 5297760 times.
✓ Branch 1 taken 468000 times.
|
5765760 | q(i0,j,l)=q(i0,j,l)+q(i0+offset,j,l) |
| 69 | ENDDO | ||
| 70 | ENDDO | ||
| 71 | ENDDO | ||
| 72 | |||
| 73 |
2/2✓ Branch 0 taken 280800 times.
✓ Branch 1 taken 112320 times.
|
393120 | DO j=j_start, j_finish |
| 74 | !CDIR NODEP | ||
| 75 | !CDIR ON_ADB(q) | ||
| 76 |
2/2✓ Branch 0 taken 8985600 times.
✓ Branch 1 taken 280800 times.
|
9378720 | DO i=1,iim |
| 77 |
2/4✓ Branch 0 taken 8985600 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 8985600 times.
✗ Branch 3 not taken.
|
9266400 | q(i,j,l)=q(i-MOD(i-1,2**(ngroup-ig+1)),j,l) |
| 78 | ENDDO | ||
| 79 | ENDDO | ||
| 80 | |||
| 81 |
2/2✓ Branch 0 taken 280800 times.
✓ Branch 1 taken 112320 times.
|
393120 | DO j=j_start, j_finish |
| 82 | !CDIR ON_ADB(airen_tab) | ||
| 83 | !CDIR ON_ADB(q) | ||
| 84 |
2/2✓ Branch 0 taken 8985600 times.
✓ Branch 1 taken 280800 times.
|
9266400 | DO i=1,iim |
| 85 | 9266400 | q(i,j,l)=q(i,j,l)*airen_tab(i,j,jd) | |
| 86 | ENDDO | ||
| 87 | 393120 | q(iip1,j,l)=q(1,j,l) | |
| 88 | ENDDO | ||
| 89 | |||
| 90 | !c Concerne le pole sud | ||
| 91 | j_start = j1-jd | ||
| 92 | j_finish = j2-jd | ||
| 93 |
2/2✓ Branch 0 taken 112320 times.
✓ Branch 1 taken 224640 times.
|
336960 | DO ig2=1,ngroup-ig+1 |
| 94 |
1/2✓ Branch 0 taken 224640 times.
✗ Branch 1 not taken.
|
224640 | offset=2**(ig2-1) |
| 95 |
2/2✓ Branch 0 taken 468000 times.
✓ Branch 1 taken 224640 times.
|
804960 | DO j=j_start, j_finish |
| 96 | !CDIR NODEP | ||
| 97 | !CDIR ON_ADB(q) | ||
| 98 |
2/4✓ Branch 0 taken 468000 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 468000 times.
✗ Branch 3 not taken.
|
692640 | DO i0=1,iim,2**ig2 |
| 99 | q(i0,jjp1-j+1-jd,l)= q(i0,jjp1-j+1-jd,l) | ||
| 100 |
2/2✓ Branch 0 taken 5297760 times.
✓ Branch 1 taken 468000 times.
|
5765760 | & +q(i0+offset,jjp1-j+1-jd,l) |
| 101 | ENDDO | ||
| 102 | ENDDO | ||
| 103 | ENDDO | ||
| 104 | |||
| 105 | |||
| 106 |
2/2✓ Branch 0 taken 280800 times.
✓ Branch 1 taken 112320 times.
|
393120 | DO j=j_start, j_finish |
| 107 | !CDIR NODEP | ||
| 108 | !CDIR ON_ADB(q) | ||
| 109 |
2/2✓ Branch 0 taken 8985600 times.
✓ Branch 1 taken 280800 times.
|
9378720 | DO i=1,iim |
| 110 | q(i,jjp1-j+1-jd,l)=q(i-MOD(i-1,2**(ngroup-ig+1)), | ||
| 111 |
2/4✓ Branch 0 taken 8985600 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 8985600 times.
✗ Branch 3 not taken.
|
9266400 | & jjp1-j+1-jd,l) |
| 112 | ENDDO | ||
| 113 | ENDDO | ||
| 114 | |||
| 115 |
2/2✓ Branch 0 taken 280800 times.
✓ Branch 1 taken 112320 times.
|
393120 | DO j=j_start, j_finish |
| 116 | !CDIR ON_ADB(aires_tab) | ||
| 117 | !CDIR ON_ADB(q) | ||
| 118 |
2/2✓ Branch 0 taken 8985600 times.
✓ Branch 1 taken 280800 times.
|
9266400 | DO i=1,iim |
| 119 | q(i,jjp1-j+1-jd,l)=q(i,jjp1-j+1-jd,l)* | ||
| 120 | 9266400 | & aires_tab(i,jjp1-j+1,jd) | |
| 121 | ENDDO | ||
| 122 | 393120 | q(iip1,jjp1-j+1-jd,l)=q(1,jjp1-j+1-jd,l) | |
| 123 | ENDDO | ||
| 124 | |||
| 125 | |||
| 126 | 112320 | j1=j2+1 | |
| 127 |
1/2✓ Branch 0 taken 112320 times.
✗ Branch 1 not taken.
|
149760 | j2=j2+2**ig |
| 128 | ENDDO | ||
| 129 | ENDDO | ||
| 130 | !$OMP END DO NOWAIT | ||
| 131 | |||
| 132 | 960 | RETURN | |
| 133 | END | ||
| 134 | |||
| 135 | |||
| 136 | |||
| 137 | |||
| 138 | 1 | SUBROUTINE INIT_GROUPEUN(airen_tab, aires_tab) | |
| 139 | |||
| 140 | USE comconst_mod, ONLY: ngroup | ||
| 141 | |||
| 142 | IMPLICIT NONE | ||
| 143 | |||
| 144 | include "dimensions.h" | ||
| 145 | include "paramet.h" | ||
| 146 | include "comgeom2.h" | ||
| 147 | |||
| 148 | ! INTEGER ngroup | ||
| 149 | ! PARAMETER (ngroup=3) | ||
| 150 | |||
| 151 | REAL airen,airecn | ||
| 152 | REAL aires,airecs | ||
| 153 | |||
| 154 | INTEGER i,j,l,ig,j1,j2,i0,jd | ||
| 155 | |||
| 156 | INTEGER j_start, j_finish | ||
| 157 | |||
| 158 | REAL :: airen_tab(iip1,jjp1,0:1) | ||
| 159 | REAL :: aires_tab(iip1,jjp1,0:1) | ||
| 160 | |||
| 161 |
2/2✓ Branch 0 taken 2 times.
✓ Branch 1 taken 1 times.
|
3 | DO jd=0, 1 |
| 162 | 2 | j1=1+jd | |
| 163 | j2=2 | ||
| 164 |
2/2✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
|
9 | DO ig=1,ngroup |
| 165 | |||
| 166 | ! c Concerne le pole nord | ||
| 167 | 6 | j_start = j1-jd | |
| 168 | 6 | j_finish = j2-jd | |
| 169 |
2/2✓ Branch 0 taken 6 times.
✓ Branch 1 taken 15 times.
|
21 | DO j=j_start, j_finish |
| 170 |
5/8✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 157 times.
✓ Branch 7 taken 15 times.
|
193 | DO i0=1,iim,2**(ngroup-ig+1) |
| 171 | airen=0. | ||
| 172 |
4/6✓ Branch 0 taken 172 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 172 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 480 times.
✓ Branch 5 taken 172 times.
|
652 | DO i=i0,i0+2**(ngroup-ig+1)-1 |
| 173 | 652 | airen = airen+aire(i,j) | |
| 174 | ENDDO | ||
| 175 |
2/2✓ Branch 0 taken 480 times.
✓ Branch 1 taken 172 times.
|
667 | DO i=i0,i0+2**(ngroup-ig+1)-1 |
| 176 | airen_tab(i,j,jd) = | ||
| 177 | 652 | & aire(i,j) / airen | |
| 178 | ENDDO | ||
| 179 | ENDDO | ||
| 180 | ENDDO | ||
| 181 | |||
| 182 | ! c Concerne le pole sud | ||
| 183 | j_start = j1-jd | ||
| 184 | j_finish = j2-jd | ||
| 185 |
2/2✓ Branch 0 taken 15 times.
✓ Branch 1 taken 6 times.
|
21 | DO j=j_start, j_finish |
| 186 |
5/8✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 157 times.
✓ Branch 7 taken 15 times.
|
193 | DO i0=1,iim,2**(ngroup-ig+1) |
| 187 | aires=0. | ||
| 188 |
4/6✓ Branch 0 taken 172 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 172 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 480 times.
✓ Branch 5 taken 172 times.
|
652 | DO i=i0,i0+2**(ngroup-ig+1)-1 |
| 189 | 652 | aires=aires+aire(i,jjp1-j+1) | |
| 190 | ENDDO | ||
| 191 |
2/2✓ Branch 0 taken 480 times.
✓ Branch 1 taken 172 times.
|
667 | DO i=i0,i0+2**(ngroup-ig+1)-1 |
| 192 | aires_tab(i,jjp1-j+1,jd) = | ||
| 193 | 652 | & aire(i,jjp1-j+1) / aires | |
| 194 | ENDDO | ||
| 195 | ENDDO | ||
| 196 | ENDDO | ||
| 197 | |||
| 198 | 6 | j1=j2+1 | |
| 199 |
1/2✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
|
8 | j2=j2+2**ig |
| 200 | ENDDO | ||
| 201 | ENDDO | ||
| 202 | |||
| 203 | 1 | RETURN | |
| 204 | END | ||
| 205 |