Changeset 5246 for LMDZ6/trunk/libf/dyn3d_common/advxp.f90
- Timestamp:
- Oct 21, 2024, 2:58:45 PM (23 hours ago)
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/dyn3d_common/advxp.f90
r5245 r5246 2 2 ! $Header$ 3 3 ! 4 SUBROUTINE ADVXP(LIMIT,DTX,PBARU,SM,S0,SSX,SY,SZ 5 . ,SSXX,SSXY,SSXZ,SYY,SYZ,SZZ,ntra) 6 IMPLICIT NONE 7 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 8 C C 9 C second-order moments (SOM) advection of tracer in X direction C 10 C C 11 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 12 C 13 C parametres principaux du modele 14 C 15 include "dimensions.h" 16 include "paramet.h" 17 18 INTEGER ntra 19 c PARAMETER (ntra = 1) 20 C 21 C definition de la grille du modele 22 C 23 REAL dtx 24 REAL pbaru ( iip1,jjp1,llm ) 25 C 26 C moments: SM total mass in each grid box 27 C S0 mass of tracer in each grid box 28 C Si 1rst order moment in i direction 29 C Sij 2nd order moment in i and j directions 30 C 31 REAL SM(iip1,jjp1,llm) 32 + ,S0(iip1,jjp1,llm,ntra) 33 REAL SSX(iip1,jjp1,llm,ntra) 34 + ,SY(iip1,jjp1,llm,ntra) 35 + ,SZ(iip1,jjp1,llm,ntra) 36 REAL SSXX(iip1,jjp1,llm,ntra) 37 + ,SSXY(iip1,jjp1,llm,ntra) 38 + ,SSXZ(iip1,jjp1,llm,ntra) 39 + ,SYY(iip1,jjp1,llm,ntra) 40 + ,SYZ(iip1,jjp1,llm,ntra) 41 + ,SZZ(iip1,jjp1,llm,ntra) 42 43 C Local : 44 C ------- 45 46 C mass fluxes across the boundaries (UGRI,VGRI,WGRI) 47 C mass fluxes in kg 48 C declaration : 49 50 REAL UGRI(iip1,jjp1,llm) 51 52 C Rem : VGRI et WGRI ne sont pas utilises dans 53 C cette subroutine ( advection en x uniquement ) 54 C 55 C 56 C Tij are the moments for the current latitude and level 57 C 58 REAL TM (iim) 59 REAL T0 (iim,NTRA),TX (iim,NTRA) 60 REAL TY (iim,NTRA),TZ (iim,NTRA) 61 REAL TXX(iim,NTRA),TXY(iim,NTRA) 62 REAL TXZ(iim,NTRA),TYY(iim,NTRA) 63 REAL TYZ(iim,NTRA),TZZ(iim,NTRA) 64 C 65 C the moments F are similarly defined and used as temporary 66 C storage for portions of the grid boxes in transit 67 C 68 REAL FM (iim) 69 REAL F0 (iim,NTRA),FX (iim,NTRA) 70 REAL FY (iim,NTRA),FZ (iim,NTRA) 71 REAL FXX(iim,NTRA),FXY(iim,NTRA) 72 REAL FXZ(iim,NTRA),FYY(iim,NTRA) 73 REAL FYZ(iim,NTRA),FZZ(iim,NTRA) 74 C 75 C work arrays 76 C 77 REAL ALF (iim),ALF1(iim),ALFQ(iim),ALF1Q(iim) 78 REAL ALF2(iim),ALF3(iim),ALF4(iim) 79 C 80 REAL SMNEW(iim),UEXT(iim) 81 REAL sqi,sqf 82 REAL TEMPTM 83 REAL SLPMAX 84 REAL S1MAX,S1NEW,S2NEW 85 86 LOGICAL LIMIT 87 INTEGER NUM(jjp1),LONK,NUMK 88 INTEGER lon,lati,latf,niv 89 INTEGER i,i2,i3,j,jv,l,k,iter 90 91 lon = iim 92 lati=2 93 latf = jjm 94 niv = llm 95 96 C *** Test de passage d'arguments ****** 97 98 c DO 399 l = 1, llm 99 c DO 399 j = 1, jjp1 100 c DO 399 i = 1, iip1 101 c IF (S0(i,j,l,ntra) .lt. 0. ) THEN 102 c PRINT*,'S0(',i,j,l,')=',S0(i,j,l,ntra) 103 c print*, 'SSX(',i,j,l,')=',SSX(i,j,l,ntra) 104 c print*, 'SY(',i,j,l,')=',SY(i,j,l,ntra) 105 c print*, 'SZ(',i,j,l,')=',SZ(i,j,l,ntra) 106 c PRINT*, 'AIE !! debut ADVXP - pbl arg. passage dans ADVXP' 107 cc STOP 108 c ENDIF 109 c 399 CONTINUE 110 111 C *** Test : diagnostique de la qtite totale de traceur 112 C dans l'atmosphere avant l'advection 113 c 114 sqi =0. 115 sqf =0. 116 c 117 DO l = 1, llm 118 DO j = 1, jjp1 119 DO i = 1, iim 120 sqi = sqi + S0(i,j,l,ntra) 121 END DO 122 END DO 123 END DO 124 PRINT*,'------ DIAG DANS ADVX2 - ENTREE -----' 125 PRINT*,'sqi=',sqi 126 c test 127 c ------------------------------------- 128 DO 300 j =1,jjp1 129 NUM(j) =1 130 300 CONTINUE 131 c DO l=1,llm 132 c NUM(2,l)=6 133 c NUM(3,l)=6 134 c NUM(jjm-1,l)=6 135 c NUM(jjm,l)=6 136 c ENDDO 137 c DO j=2,6 138 c NUM(j)=12 139 c ENDDO 140 c DO j=jjm-5,jjm-1 141 c NUM(j)=12 142 c ENDDO 143 144 C Interface : adaptation nouveau modele 145 C ------------------------------------- 146 C 147 C --------------------------------------------------------- 148 C Conversion des flux de masses en kg/s 149 C pbaru est en N/s d'ou : 150 C ugri est en kg/s 151 152 DO 500 l = 1,llm 153 DO 500 j = 1,jjp1 154 DO 500 i = 1,iip1 155 ugri (i,j,llm+1-l) =pbaru (i,j,l) 156 500 CONTINUE 157 158 C --------------------------------------------------------- 159 C start here 160 C 161 C boucle principale sur les niveaux et les latitudes 162 C 163 DO 1 L=1,NIV 164 DO 1 K=lati,latf 165 166 C 167 C initialisation 168 C 169 C program assumes periodic boundaries in X 170 C 171 DO 10 I=2,LON 172 SMNEW(I)=SM(I,K,L)+(UGRI(I-1,K,L)-UGRI(I,K,L))*DTX 173 10 CONTINUE 174 SMNEW(1)=SM(1,K,L)+(UGRI(LON,K,L)-UGRI(1,K,L))*DTX 175 C 176 C modifications for extended polar zones 177 C 178 NUMK=NUM(K) 179 LONK=LON/NUMK 180 C 181 IF(NUMK.GT.1) THEN 182 C 183 DO 111 I=1,LON 184 TM(I)=0. 185 111 CONTINUE 186 DO 112 JV=1,NTRA 187 DO 1120 I=1,LON 188 T0 (I,JV)=0. 189 TX (I,JV)=0. 190 TY (I,JV)=0. 191 TZ (I,JV)=0. 192 TXX(I,JV)=0. 193 TXY(I,JV)=0. 194 TXZ(I,JV)=0. 195 TYY(I,JV)=0. 196 TYZ(I,JV)=0. 197 TZZ(I,JV)=0. 198 1120 CONTINUE 199 112 CONTINUE 200 C 201 DO 11 I2=1,NUMK 202 C 203 DO 113 I=1,LONK 204 I3=(I-1)*NUMK+I2 205 TM(I)=TM(I)+SM(I3,K,L) 206 ALF(I)=SM(I3,K,L)/TM(I) 207 ALF1(I)=1.-ALF(I) 208 ALFQ(I)=ALF(I)*ALF(I) 209 ALF1Q(I)=ALF1(I)*ALF1(I) 210 ALF2(I)=ALF1(I)-ALF(I) 211 ALF3(I)=ALF(I)*ALF1(I) 212 113 CONTINUE 213 C 214 DO 114 JV=1,NTRA 215 DO 1140 I=1,LONK 216 I3=(I-1)*NUMK+I2 217 TEMPTM=-ALF(I)*T0(I,JV)+ALF1(I)*S0(I3,K,L,JV) 218 T0 (I,JV)=T0(I,JV)+S0(I3,K,L,JV) 219 TXX(I,JV)=ALFQ(I)*SSXX(I3,K,L,JV)+ALF1Q(I)*TXX(I,JV) 220 + +5.*( ALF3(I)*(SSX(I3,K,L,JV)-TX(I,JV))+ALF2(I)*TEMPTM ) 221 TX (I,JV)=ALF(I)*SSX(I3,K,L,JV)+ALF1(I)*TX(I,JV)+3.*TEMPTM 222 TXY(I,JV)=ALF (I)*SSXY(I3,K,L,JV)+ALF1(I)*TXY(I,JV) 223 + +3.*(ALF1(I)*SY (I3,K,L,JV)-ALF (I)*TY (I,JV)) 224 TXZ(I,JV)=ALF (I)*SSXZ(I3,K,L,JV)+ALF1(I)*TXZ(I,JV) 225 + +3.*(ALF1(I)*SZ (I3,K,L,JV)-ALF (I)*TZ (I,JV)) 226 TY (I,JV)=TY (I,JV)+SY (I3,K,L,JV) 227 TZ (I,JV)=TZ (I,JV)+SZ (I3,K,L,JV) 228 TYY(I,JV)=TYY(I,JV)+SYY(I3,K,L,JV) 229 TYZ(I,JV)=TYZ(I,JV)+SYZ(I3,K,L,JV) 230 TZZ(I,JV)=TZZ(I,JV)+SZZ(I3,K,L,JV) 231 1140 CONTINUE 232 114 CONTINUE 233 C 234 11 CONTINUE 235 C 236 ELSE 237 C 238 DO 115 I=1,LON 239 TM(I)=SM(I,K,L) 240 115 CONTINUE 241 DO 116 JV=1,NTRA 242 DO 1160 I=1,LON 243 T0 (I,JV)=S0 (I,K,L,JV) 244 TX (I,JV)=SSX (I,K,L,JV) 245 TY (I,JV)=SY (I,K,L,JV) 246 TZ (I,JV)=SZ (I,K,L,JV) 247 TXX(I,JV)=SSXX(I,K,L,JV) 248 TXY(I,JV)=SSXY(I,K,L,JV) 249 TXZ(I,JV)=SSXZ(I,K,L,JV) 250 TYY(I,JV)=SYY(I,K,L,JV) 251 TYZ(I,JV)=SYZ(I,K,L,JV) 252 TZZ(I,JV)=SZZ(I,K,L,JV) 253 1160 CONTINUE 254 116 CONTINUE 255 C 256 ENDIF 257 C 258 DO 117 I=1,LONK 259 UEXT(I)=UGRI(I*NUMK,K,L) 260 117 CONTINUE 261 C 262 C place limits on appropriate moments before transport 263 C (if flux-limiting is to be applied) 264 C 265 IF(.NOT.LIMIT) GO TO 13 266 C 267 DO 12 JV=1,NTRA 268 DO 120 I=1,LONK 269 IF(T0(I,JV).GT.0.) THEN 270 SLPMAX=T0(I,JV) 271 S1MAX=1.5*SLPMAX 272 S1NEW=AMIN1(S1MAX,AMAX1(-S1MAX,TX(I,JV))) 273 S2NEW=AMIN1( 2.*SLPMAX-ABS(S1NEW)/3. , 274 + AMAX1(ABS(S1NEW)-SLPMAX,TXX(I,JV)) ) 275 TX (I,JV)=S1NEW 276 TXX(I,JV)=S2NEW 277 TXY(I,JV)=AMIN1(SLPMAX,AMAX1(-SLPMAX,TXY(I,JV))) 278 TXZ(I,JV)=AMIN1(SLPMAX,AMAX1(-SLPMAX,TXZ(I,JV))) 279 ELSE 280 TX (I,JV)=0. 281 TXX(I,JV)=0. 282 TXY(I,JV)=0. 283 TXZ(I,JV)=0. 284 ENDIF 285 120 CONTINUE 286 12 CONTINUE 287 C 4 SUBROUTINE ADVXP(LIMIT,DTX,PBARU,SM,S0,SSX,SY,SZ & 5 ,SSXX,SSXY,SSXZ,SYY,SYZ,SZZ,ntra) 6 IMPLICIT NONE 7 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 8 ! C 9 ! second-order moments (SOM) advection of tracer in X direction C 10 ! C 11 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 12 ! 13 ! parametres principaux du modele 14 ! 15 include "dimensions.h" 16 include "paramet.h" 17 18 INTEGER :: ntra 19 ! PARAMETER (ntra = 1) 20 ! 21 ! definition de la grille du modele 22 ! 23 REAL :: dtx 24 REAL :: pbaru ( iip1,jjp1,llm ) 25 ! 26 ! moments: SM total mass in each grid box 27 ! S0 mass of tracer in each grid box 28 ! Si 1rst order moment in i direction 29 ! Sij 2nd order moment in i and j directions 30 ! 31 REAL :: SM(iip1,jjp1,llm) & 32 ,S0(iip1,jjp1,llm,ntra) 33 REAL :: SSX(iip1,jjp1,llm,ntra) & 34 ,SY(iip1,jjp1,llm,ntra) & 35 ,SZ(iip1,jjp1,llm,ntra) 36 REAL :: SSXX(iip1,jjp1,llm,ntra) & 37 ,SSXY(iip1,jjp1,llm,ntra) & 38 ,SSXZ(iip1,jjp1,llm,ntra) & 39 ,SYY(iip1,jjp1,llm,ntra) & 40 ,SYZ(iip1,jjp1,llm,ntra) & 41 ,SZZ(iip1,jjp1,llm,ntra) 42 43 ! Local : 44 ! ------- 45 46 ! mass fluxes across the boundaries (UGRI,VGRI,WGRI) 47 ! mass fluxes in kg 48 ! declaration : 49 50 REAL :: UGRI(iip1,jjp1,llm) 51 52 ! Rem : VGRI et WGRI ne sont pas utilises dans 53 ! cette subroutine ( advection en x uniquement ) 54 ! 55 ! 56 ! Tij are the moments for the current latitude and level 57 ! 58 REAL :: TM (iim) 59 REAL :: T0 (iim,NTRA),TX (iim,NTRA) 60 REAL :: TY (iim,NTRA),TZ (iim,NTRA) 61 REAL :: TXX(iim,NTRA),TXY(iim,NTRA) 62 REAL :: TXZ(iim,NTRA),TYY(iim,NTRA) 63 REAL :: TYZ(iim,NTRA),TZZ(iim,NTRA) 64 ! 65 ! the moments F are similarly defined and used as temporary 66 ! storage for portions of the grid boxes in transit 67 ! 68 REAL :: FM (iim) 69 REAL :: F0 (iim,NTRA),FX (iim,NTRA) 70 REAL :: FY (iim,NTRA),FZ (iim,NTRA) 71 REAL :: FXX(iim,NTRA),FXY(iim,NTRA) 72 REAL :: FXZ(iim,NTRA),FYY(iim,NTRA) 73 REAL :: FYZ(iim,NTRA),FZZ(iim,NTRA) 74 ! 75 ! work arrays 76 ! 77 REAL :: ALF (iim),ALF1(iim),ALFQ(iim),ALF1Q(iim) 78 REAL :: ALF2(iim),ALF3(iim),ALF4(iim) 79 ! 80 REAL :: SMNEW(iim),UEXT(iim) 81 REAL :: sqi,sqf 82 REAL :: TEMPTM 83 REAL :: SLPMAX 84 REAL :: S1MAX,S1NEW,S2NEW 85 86 LOGICAL :: LIMIT 87 INTEGER :: NUM(jjp1),LONK,NUMK 88 INTEGER :: lon,lati,latf,niv 89 INTEGER :: i,i2,i3,j,jv,l,k,iter 90 91 lon = iim 92 lati=2 93 latf = jjm 94 niv = llm 95 96 ! *** Test de passage d'arguments ****** 97 98 ! DO 399 l = 1, llm 99 ! DO 399 j = 1, jjp1 100 ! DO 399 i = 1, iip1 101 ! IF (S0(i,j,l,ntra) .lt. 0. ) THEN 102 ! PRINT*,'S0(',i,j,l,')=',S0(i,j,l,ntra) 103 ! print*, 'SSX(',i,j,l,')=',SSX(i,j,l,ntra) 104 ! print*, 'SY(',i,j,l,')=',SY(i,j,l,ntra) 105 ! print*, 'SZ(',i,j,l,')=',SZ(i,j,l,ntra) 106 ! PRINT*, 'AIE !! debut ADVXP - pbl arg. passage dans ADVXP' 107 !c STOP 108 ! ENDIF 109 ! 399 CONTINUE 110 111 ! *** Test : diagnostique de la qtite totale de traceur 112 ! dans l'atmosphere avant l'advection 113 ! 114 sqi =0. 115 sqf =0. 116 ! 117 DO l = 1, llm 118 DO j = 1, jjp1 119 DO i = 1, iim 120 sqi = sqi + S0(i,j,l,ntra) 121 END DO 122 END DO 123 END DO 124 PRINT*,'------ DIAG DANS ADVX2 - ENTREE -----' 125 PRINT*,'sqi=',sqi 126 ! test 127 ! ------------------------------------- 128 DO j =1,jjp1 129 NUM(j) =1 130 END DO 131 ! DO l=1,llm 132 ! NUM(2,l)=6 133 ! NUM(3,l)=6 134 ! NUM(jjm-1,l)=6 135 ! NUM(jjm,l)=6 136 ! ENDDO 137 ! DO j=2,6 138 ! NUM(j)=12 139 ! ENDDO 140 ! DO j=jjm-5,jjm-1 141 ! NUM(j)=12 142 ! ENDDO 143 144 ! Interface : adaptation nouveau modele 145 ! ------------------------------------- 146 ! 147 ! --------------------------------------------------------- 148 ! Conversion des flux de masses en kg/s 149 ! pbaru est en N/s d'ou : 150 ! ugri est en kg/s 151 152 DO l = 1,llm 153 DO j = 1,jjp1 154 DO i = 1,iip1 155 ugri (i,j,llm+1-l) =pbaru (i,j,l) 156 END DO 157 END DO 158 END DO 159 160 ! --------------------------------------------------------- 161 ! start here 162 ! 163 ! boucle principale sur les niveaux et les latitudes 164 ! 165 DO L=1,NIV 166 DO K=lati,latf 167 168 ! 169 ! initialisation 170 ! 171 ! program assumes periodic boundaries in X 172 ! 173 DO I=2,LON 174 SMNEW(I)=SM(I,K,L)+(UGRI(I-1,K,L)-UGRI(I,K,L))*DTX 175 END DO 176 SMNEW(1)=SM(1,K,L)+(UGRI(LON,K,L)-UGRI(1,K,L))*DTX 177 ! 178 ! modifications for extended polar zones 179 ! 180 NUMK=NUM(K) 181 LONK=LON/NUMK 182 ! 183 IF(NUMK.GT.1) THEN 184 ! 185 DO I=1,LON 186 TM(I)=0. 187 END DO 188 DO JV=1,NTRA 189 DO I=1,LON 190 T0 (I,JV)=0. 191 TX (I,JV)=0. 192 TY (I,JV)=0. 193 TZ (I,JV)=0. 194 TXX(I,JV)=0. 195 TXY(I,JV)=0. 196 TXZ(I,JV)=0. 197 TYY(I,JV)=0. 198 TYZ(I,JV)=0. 199 TZZ(I,JV)=0. 200 END DO 201 END DO 202 ! 203 DO I2=1,NUMK 204 ! 205 DO I=1,LONK 206 I3=(I-1)*NUMK+I2 207 TM(I)=TM(I)+SM(I3,K,L) 208 ALF(I)=SM(I3,K,L)/TM(I) 209 ALF1(I)=1.-ALF(I) 210 ALFQ(I)=ALF(I)*ALF(I) 211 ALF1Q(I)=ALF1(I)*ALF1(I) 212 ALF2(I)=ALF1(I)-ALF(I) 213 ALF3(I)=ALF(I)*ALF1(I) 214 END DO 215 ! 216 DO JV=1,NTRA 217 DO I=1,LONK 218 I3=(I-1)*NUMK+I2 219 TEMPTM=-ALF(I)*T0(I,JV)+ALF1(I)*S0(I3,K,L,JV) 220 T0 (I,JV)=T0(I,JV)+S0(I3,K,L,JV) 221 TXX(I,JV)=ALFQ(I)*SSXX(I3,K,L,JV)+ALF1Q(I)*TXX(I,JV) & 222 +5.*( ALF3(I)*(SSX(I3,K,L,JV)-TX(I,JV))+ALF2(I)*TEMPTM ) 223 TX (I,JV)=ALF(I)*SSX(I3,K,L,JV)+ALF1(I)*TX(I,JV)+3.*TEMPTM 224 TXY(I,JV)=ALF (I)*SSXY(I3,K,L,JV)+ALF1(I)*TXY(I,JV) & 225 +3.*(ALF1(I)*SY (I3,K,L,JV)-ALF (I)*TY (I,JV)) 226 TXZ(I,JV)=ALF (I)*SSXZ(I3,K,L,JV)+ALF1(I)*TXZ(I,JV) & 227 +3.*(ALF1(I)*SZ (I3,K,L,JV)-ALF (I)*TZ (I,JV)) 228 TY (I,JV)=TY (I,JV)+SY (I3,K,L,JV) 229 TZ (I,JV)=TZ (I,JV)+SZ (I3,K,L,JV) 230 TYY(I,JV)=TYY(I,JV)+SYY(I3,K,L,JV) 231 TYZ(I,JV)=TYZ(I,JV)+SYZ(I3,K,L,JV) 232 TZZ(I,JV)=TZZ(I,JV)+SZZ(I3,K,L,JV) 233 END DO 234 END DO 235 ! 236 END DO 237 ! 238 ELSE 239 ! 240 DO I=1,LON 241 TM(I)=SM(I,K,L) 242 END DO 243 DO JV=1,NTRA 244 DO I=1,LON 245 T0 (I,JV)=S0 (I,K,L,JV) 246 TX (I,JV)=SSX (I,K,L,JV) 247 TY (I,JV)=SY (I,K,L,JV) 248 TZ (I,JV)=SZ (I,K,L,JV) 249 TXX(I,JV)=SSXX(I,K,L,JV) 250 TXY(I,JV)=SSXY(I,K,L,JV) 251 TXZ(I,JV)=SSXZ(I,K,L,JV) 252 TYY(I,JV)=SYY(I,K,L,JV) 253 TYZ(I,JV)=SYZ(I,K,L,JV) 254 TZZ(I,JV)=SZZ(I,K,L,JV) 255 END DO 256 END DO 257 ! 258 ENDIF 259 ! 260 DO I=1,LONK 261 UEXT(I)=UGRI(I*NUMK,K,L) 262 END DO 263 ! 264 ! place limits on appropriate moments before transport 265 ! (if flux-limiting is to be applied) 266 ! 267 IF(.NOT.LIMIT) GO TO 13 268 ! 269 DO JV=1,NTRA 270 DO I=1,LONK 271 IF(T0(I,JV).GT.0.) THEN 272 SLPMAX=T0(I,JV) 273 S1MAX=1.5*SLPMAX 274 S1NEW=AMIN1(S1MAX,AMAX1(-S1MAX,TX(I,JV))) 275 S2NEW=AMIN1( 2.*SLPMAX-ABS(S1NEW)/3. , & 276 AMAX1(ABS(S1NEW)-SLPMAX,TXX(I,JV)) ) 277 TX (I,JV)=S1NEW 278 TXX(I,JV)=S2NEW 279 TXY(I,JV)=AMIN1(SLPMAX,AMAX1(-SLPMAX,TXY(I,JV))) 280 TXZ(I,JV)=AMIN1(SLPMAX,AMAX1(-SLPMAX,TXZ(I,JV))) 281 ELSE 282 TX (I,JV)=0. 283 TXX(I,JV)=0. 284 TXY(I,JV)=0. 285 TXZ(I,JV)=0. 286 ENDIF 287 END DO 288 END DO 289 ! 288 290 13 CONTINUE 289 C 290 C calculate flux and moments between adjacent boxes 291 C 1- create temporary moments/masses for partial boxes in transit 292 C 2- reajusts moments remaining in the box 293 C 294 C flux from IP to I if U(I).lt.0 295 C 296 DO 140 I=1,LONK-1 297 IF(UEXT(I).LT.0.) THEN 298 FM(I)=-UEXT(I)*DTX 299 ALF(I)=FM(I)/TM(I+1) 300 TM(I+1)=TM(I+1)-FM(I) 301 ENDIF 302 140 CONTINUE 303 C 304 I=LONK 305 IF(UEXT(I).LT.0.) THEN 306 FM(I)=-UEXT(I)*DTX 307 ALF(I)=FM(I)/TM(1) 308 TM(1)=TM(1)-FM(I) 309 ENDIF 310 C 311 C flux from I to IP if U(I).gt.0 312 C 313 DO 141 I=1,LONK 314 IF(UEXT(I).GE.0.) THEN 315 FM(I)=UEXT(I)*DTX 316 ALF(I)=FM(I)/TM(I) 317 TM(I)=TM(I)-FM(I) 318 ENDIF 319 141 CONTINUE 320 C 321 DO 142 I=1,LONK 322 ALFQ(I)=ALF(I)*ALF(I) 323 ALF1(I)=1.-ALF(I) 324 ALF1Q(I)=ALF1(I)*ALF1(I) 325 ALF2(I)=ALF1(I)-ALF(I) 326 ALF3(I)=ALF(I)*ALFQ(I) 327 ALF4(I)=ALF1(I)*ALF1Q(I) 328 142 CONTINUE 329 C 330 DO 150 JV=1,NTRA 331 DO 1500 I=1,LONK-1 332 C 333 IF(UEXT(I).LT.0.) THEN 334 C 335 F0 (I,JV)=ALF (I)* ( T0(I+1,JV)-ALF1(I)* 336 + ( TX(I+1,JV)-ALF2(I)*TXX(I+1,JV) ) ) 337 FX (I,JV)=ALFQ(I)*(TX(I+1,JV)-3.*ALF1(I)*TXX(I+1,JV)) 338 FXX(I,JV)=ALF3(I)*TXX(I+1,JV) 339 FY (I,JV)=ALF (I)*(TY(I+1,JV)-ALF1(I)*TXY(I+1,JV)) 340 FZ (I,JV)=ALF (I)*(TZ(I+1,JV)-ALF1(I)*TXZ(I+1,JV)) 341 FXY(I,JV)=ALFQ(I)*TXY(I+1,JV) 342 FXZ(I,JV)=ALFQ(I)*TXZ(I+1,JV) 343 FYY(I,JV)=ALF (I)*TYY(I+1,JV) 344 FYZ(I,JV)=ALF (I)*TYZ(I+1,JV) 345 FZZ(I,JV)=ALF (I)*TZZ(I+1,JV) 346 C 347 T0 (I+1,JV)=T0(I+1,JV)-F0(I,JV) 348 TX (I+1,JV)=ALF1Q(I)*(TX(I+1,JV)+3.*ALF(I)*TXX(I+1,JV)) 349 TXX(I+1,JV)=ALF4(I)*TXX(I+1,JV) 350 TY (I+1,JV)=TY (I+1,JV)-FY (I,JV) 351 TZ (I+1,JV)=TZ (I+1,JV)-FZ (I,JV) 352 TYY(I+1,JV)=TYY(I+1,JV)-FYY(I,JV) 353 TYZ(I+1,JV)=TYZ(I+1,JV)-FYZ(I,JV) 354 TZZ(I+1,JV)=TZZ(I+1,JV)-FZZ(I,JV) 355 TXY(I+1,JV)=ALF1Q(I)*TXY(I+1,JV) 356 TXZ(I+1,JV)=ALF1Q(I)*TXZ(I+1,JV) 357 C 358 ENDIF 359 C 360 1500 CONTINUE 361 150 CONTINUE 362 C 363 I=LONK 364 IF(UEXT(I).LT.0.) THEN 365 C 366 DO 151 JV=1,NTRA 367 C 368 F0 (I,JV)=ALF (I)* ( T0(1,JV)-ALF1(I)* 369 + ( TX(1,JV)-ALF2(I)*TXX(1,JV) ) ) 370 FX (I,JV)=ALFQ(I)*(TX(1,JV)-3.*ALF1(I)*TXX(1,JV)) 371 FXX(I,JV)=ALF3(I)*TXX(1,JV) 372 FY (I,JV)=ALF (I)*(TY(1,JV)-ALF1(I)*TXY(1,JV)) 373 FZ (I,JV)=ALF (I)*(TZ(1,JV)-ALF1(I)*TXZ(1,JV)) 374 FXY(I,JV)=ALFQ(I)*TXY(1,JV) 375 FXZ(I,JV)=ALFQ(I)*TXZ(1,JV) 376 FYY(I,JV)=ALF (I)*TYY(1,JV) 377 FYZ(I,JV)=ALF (I)*TYZ(1,JV) 378 FZZ(I,JV)=ALF (I)*TZZ(1,JV) 379 C 380 T0 (1,JV)=T0(1,JV)-F0(I,JV) 381 TX (1,JV)=ALF1Q(I)*(TX(1,JV)+3.*ALF(I)*TXX(1,JV)) 382 TXX(1,JV)=ALF4(I)*TXX(1,JV) 383 TY (1,JV)=TY (1,JV)-FY (I,JV) 384 TZ (1,JV)=TZ (1,JV)-FZ (I,JV) 385 TYY(1,JV)=TYY(1,JV)-FYY(I,JV) 386 TYZ(1,JV)=TYZ(1,JV)-FYZ(I,JV) 387 TZZ(1,JV)=TZZ(1,JV)-FZZ(I,JV) 388 TXY(1,JV)=ALF1Q(I)*TXY(1,JV) 389 TXZ(1,JV)=ALF1Q(I)*TXZ(1,JV) 390 C 391 151 CONTINUE 392 C 393 ENDIF 394 C 395 DO 152 JV=1,NTRA 396 DO 1520 I=1,LONK 397 C 398 IF(UEXT(I).GE.0.) THEN 399 C 400 F0 (I,JV)=ALF (I)* ( T0(I,JV)+ALF1(I)* 401 + ( TX(I,JV)+ALF2(I)*TXX(I,JV) ) ) 402 FX (I,JV)=ALFQ(I)*(TX(I,JV)+3.*ALF1(I)*TXX(I,JV)) 403 FXX(I,JV)=ALF3(I)*TXX(I,JV) 404 FY (I,JV)=ALF (I)*(TY(I,JV)+ALF1(I)*TXY(I,JV)) 405 FZ (I,JV)=ALF (I)*(TZ(I,JV)+ALF1(I)*TXZ(I,JV)) 406 FXY(I,JV)=ALFQ(I)*TXY(I,JV) 407 FXZ(I,JV)=ALFQ(I)*TXZ(I,JV) 408 FYY(I,JV)=ALF (I)*TYY(I,JV) 409 FYZ(I,JV)=ALF (I)*TYZ(I,JV) 410 FZZ(I,JV)=ALF (I)*TZZ(I,JV) 411 C 412 T0 (I,JV)=T0(I,JV)-F0(I,JV) 413 TX (I,JV)=ALF1Q(I)*(TX(I,JV)-3.*ALF(I)*TXX(I,JV)) 414 TXX(I,JV)=ALF4(I)*TXX(I,JV) 415 TY (I,JV)=TY (I,JV)-FY (I,JV) 416 TZ (I,JV)=TZ (I,JV)-FZ (I,JV) 417 TYY(I,JV)=TYY(I,JV)-FYY(I,JV) 418 TYZ(I,JV)=TYZ(I,JV)-FYZ(I,JV) 419 TZZ(I,JV)=TZZ(I,JV)-FZZ(I,JV) 420 TXY(I,JV)=ALF1Q(I)*TXY(I,JV) 421 TXZ(I,JV)=ALF1Q(I)*TXZ(I,JV) 422 C 423 ENDIF 424 C 425 1520 CONTINUE 426 152 CONTINUE 427 C 428 C puts the temporary moments Fi into appropriate neighboring boxes 429 C 430 DO 160 I=1,LONK 431 IF(UEXT(I).LT.0.) THEN 432 TM(I)=TM(I)+FM(I) 433 ALF(I)=FM(I)/TM(I) 434 ENDIF 435 160 CONTINUE 436 C 437 DO 161 I=1,LONK-1 438 IF(UEXT(I).GE.0.) THEN 439 TM(I+1)=TM(I+1)+FM(I) 440 ALF(I)=FM(I)/TM(I+1) 441 ENDIF 442 161 CONTINUE 443 C 444 I=LONK 445 IF(UEXT(I).GE.0.) THEN 446 TM(1)=TM(1)+FM(I) 447 ALF(I)=FM(I)/TM(1) 448 ENDIF 449 C 450 DO 162 I=1,LONK 451 ALF1(I)=1.-ALF(I) 452 ALFQ(I)=ALF(I)*ALF(I) 453 ALF1Q(I)=ALF1(I)*ALF1(I) 454 ALF2(I)=ALF1(I)-ALF(I) 455 ALF3(I)=ALF(I)*ALF1(I) 456 162 CONTINUE 457 C 458 DO 170 JV=1,NTRA 459 DO 1700 I=1,LONK 460 C 461 IF(UEXT(I).LT.0.) THEN 462 C 463 TEMPTM=-ALF(I)*T0(I,JV)+ALF1(I)*F0(I,JV) 464 T0 (I,JV)=T0(I,JV)+F0(I,JV) 465 TXX(I,JV)=ALFQ(I)*FXX(I,JV)+ALF1Q(I)*TXX(I,JV) 466 + +5.*( ALF3(I)*(FX(I,JV)-TX(I,JV))+ALF2(I)*TEMPTM ) 467 TX (I,JV)=ALF (I)*FX (I,JV)+ALF1(I)*TX (I,JV)+3.*TEMPTM 468 TXY(I,JV)=ALF (I)*FXY(I,JV)+ALF1(I)*TXY(I,JV) 469 + +3.*(ALF1(I)*FY (I,JV)-ALF (I)*TY (I,JV)) 470 TXZ(I,JV)=ALF (I)*FXZ(I,JV)+ALF1(I)*TXZ(I,JV) 471 + +3.*(ALF1(I)*FZ (I,JV)-ALF (I)*TZ (I,JV)) 472 TY (I,JV)=TY (I,JV)+FY (I,JV) 473 TZ (I,JV)=TZ (I,JV)+FZ (I,JV) 474 TYY(I,JV)=TYY(I,JV)+FYY(I,JV) 475 TYZ(I,JV)=TYZ(I,JV)+FYZ(I,JV) 476 TZZ(I,JV)=TZZ(I,JV)+FZZ(I,JV) 477 C 478 ENDIF 479 C 480 1700 CONTINUE 481 170 CONTINUE 482 C 483 DO 171 JV=1,NTRA 484 DO 1710 I=1,LONK-1 485 C 486 IF(UEXT(I).GE.0.) THEN 487 C 488 TEMPTM=ALF(I)*T0(I+1,JV)-ALF1(I)*F0(I,JV) 489 T0 (I+1,JV)=T0(I+1,JV)+F0(I,JV) 490 TXX(I+1,JV)=ALFQ(I)*FXX(I,JV)+ALF1Q(I)*TXX(I+1,JV) 491 + +5.*( ALF3(I)*(TX(I+1,JV)-FX(I,JV))-ALF2(I)*TEMPTM ) 492 TX (I+1,JV)=ALF(I)*FX (I ,JV)+ALF1(I)*TX (I+1,JV)+3.*TEMPTM 493 TXY(I+1,JV)=ALF(I)*FXY(I ,JV)+ALF1(I)*TXY(I+1,JV) 494 + +3.*(ALF(I)*TY (I+1,JV)-ALF1(I)*FY (I ,JV)) 495 TXZ(I+1,JV)=ALF(I)*FXZ(I ,JV)+ALF1(I)*TXZ(I+1,JV) 496 + +3.*(ALF(I)*TZ (I+1,JV)-ALF1(I)*FZ (I ,JV)) 497 TY (I+1,JV)=TY (I+1,JV)+FY (I,JV) 498 TZ (I+1,JV)=TZ (I+1,JV)+FZ (I,JV) 499 TYY(I+1,JV)=TYY(I+1,JV)+FYY(I,JV) 500 TYZ(I+1,JV)=TYZ(I+1,JV)+FYZ(I,JV) 501 TZZ(I+1,JV)=TZZ(I+1,JV)+FZZ(I,JV) 502 C 503 ENDIF 504 C 505 1710 CONTINUE 506 171 CONTINUE 507 C 508 I=LONK 509 IF(UEXT(I).GE.0.) THEN 510 DO 172 JV=1,NTRA 511 TEMPTM=ALF(I)*T0(1,JV)-ALF1(I)*F0(I,JV) 512 T0 (1,JV)=T0(1,JV)+F0(I,JV) 513 TXX(1,JV)=ALFQ(I)*FXX(I,JV)+ALF1Q(I)*TXX(1,JV) 514 + +5.*( ALF3(I)*(TX(1,JV)-FX(I,JV))-ALF2(I)*TEMPTM ) 515 TX (1,JV)=ALF(I)*FX(I,JV)+ALF1(I)*TX(1,JV)+3.*TEMPTM 516 TXY(1,JV)=ALF(I)*FXY(I,JV)+ALF1(I)*TXY(1,JV) 517 + +3.*(ALF(I)*TY (1,JV)-ALF1(I)*FY (I,JV)) 518 TXZ(1,JV)=ALF(I)*FXZ(I,JV)+ALF1(I)*TXZ(1,JV) 519 + +3.*(ALF(I)*TZ (1,JV)-ALF1(I)*FZ (I,JV)) 520 TY (1,JV)=TY (1,JV)+FY (I,JV) 521 TZ (1,JV)=TZ (1,JV)+FZ (I,JV) 522 TYY(1,JV)=TYY(1,JV)+FYY(I,JV) 523 TYZ(1,JV)=TYZ(1,JV)+FYZ(I,JV) 524 TZZ(1,JV)=TZZ(1,JV)+FZZ(I,JV) 525 172 CONTINUE 526 ENDIF 527 C 528 C retour aux mailles d'origine (passage des Tij aux Sij) 529 C 530 IF(NUMK.GT.1) THEN 531 C 532 DO 18 I2=1,NUMK 533 C 534 DO 180 I=1,LONK 535 C 536 I3=I2+(I-1)*NUMK 537 SM(I3,K,L)=SMNEW(I3) 538 ALF(I)=SMNEW(I3)/TM(I) 539 TM(I)=TM(I)-SMNEW(I3) 540 C 541 ALFQ(I)=ALF(I)*ALF(I) 542 ALF1(I)=1.-ALF(I) 543 ALF1Q(I)=ALF1(I)*ALF1(I) 544 ALF2(I)=ALF1(I)-ALF(I) 545 ALF3(I)=ALF(I)*ALFQ(I) 546 ALF4(I)=ALF1(I)*ALF1Q(I) 547 C 548 180 CONTINUE 549 C 550 DO 181 JV=1,NTRA 551 DO 181 I=1,LONK 552 C 553 I3=I2+(I-1)*NUMK 554 S0 (I3,K,L,JV)=ALF (I)* ( T0(I,JV)-ALF1(I)* 555 + ( TX(I,JV)-ALF2(I)*TXX(I,JV) ) ) 556 SSX (I3,K,L,JV)=ALFQ(I)*(TX(I,JV)-3.*ALF1(I)*TXX(I,JV)) 557 SSXX(I3,K,L,JV)=ALF3(I)*TXX(I,JV) 558 SY (I3,K,L,JV)=ALF (I)*(TY(I,JV)-ALF1(I)*TXY(I,JV)) 559 SZ (I3,K,L,JV)=ALF (I)*(TZ(I,JV)-ALF1(I)*TXZ(I,JV)) 560 SSXY(I3,K,L,JV)=ALFQ(I)*TXY(I,JV) 561 SSXZ(I3,K,L,JV)=ALFQ(I)*TXZ(I,JV) 562 SYY(I3,K,L,JV)=ALF (I)*TYY(I,JV) 563 SYZ(I3,K,L,JV)=ALF (I)*TYZ(I,JV) 564 SZZ(I3,K,L,JV)=ALF (I)*TZZ(I,JV) 565 C 566 C reajusts moments remaining in the box 567 C 568 T0 (I,JV)=T0(I,JV)-S0(I3,K,L,JV) 569 TX (I,JV)=ALF1Q(I)*(TX(I,JV)+3.*ALF(I)*TXX(I,JV)) 570 TXX(I,JV)=ALF4 (I)*TXX(I,JV) 571 TY (I,JV)=TY (I,JV)-SY (I3,K,L,JV) 572 TZ (I,JV)=TZ (I,JV)-SZ (I3,K,L,JV) 573 TYY(I,JV)=TYY(I,JV)-SYY(I3,K,L,JV) 574 TYZ(I,JV)=TYZ(I,JV)-SYZ(I3,K,L,JV) 575 TZZ(I,JV)=TZZ(I,JV)-SZZ(I3,K,L,JV) 576 TXY(I,JV)=ALF1Q(I)*TXY(I,JV) 577 TXZ(I,JV)=ALF1Q(I)*TXZ(I,JV) 578 C 579 181 CONTINUE 580 C 581 18 CONTINUE 582 C 583 ELSE 584 C 585 DO 190 I=1,LON 586 SM(I,K,L)=TM(I) 587 190 CONTINUE 588 DO 191 JV=1,NTRA 589 DO 1910 I=1,LON 590 S0 (I,K,L,JV)=T0 (I,JV) 591 SSX (I,K,L,JV)=TX (I,JV) 592 SY (I,K,L,JV)=TY (I,JV) 593 SZ (I,K,L,JV)=TZ (I,JV) 594 SSXX(I,K,L,JV)=TXX(I,JV) 595 SSXY(I,K,L,JV)=TXY(I,JV) 596 SSXZ(I,K,L,JV)=TXZ(I,JV) 597 SYY(I,K,L,JV)=TYY(I,JV) 598 SYZ(I,K,L,JV)=TYZ(I,JV) 599 SZZ(I,K,L,JV)=TZZ(I,JV) 600 1910 CONTINUE 601 191 CONTINUE 602 C 603 ENDIF 604 C 605 1 CONTINUE 606 C 607 C ----------- AA Test en fin de ADVX ------ Controle des S* 608 609 c DO 9999 l = 1, llm 610 c DO 9999 j = 1, jjp1 611 c DO 9999 i = 1, iip1 612 c IF (S0(i,j,l,ntra).lt.0..and.LIMIT) THEN 613 c PRINT*, '-------------------' 614 c PRINT*, 'En fin de ADVXP' 615 c PRINT*,'S0(',i,j,l,')=',S0(i,j,l,ntra) 616 c print*, 'SSX(',i,j,l,')=',SSX(i,j,l,ntra) 617 c print*, 'SY(',i,j,l,')=',SY(i,j,l,ntra) 618 c print*, 'SZ(',i,j,l,')=',SZ(i,j,l,ntra) 619 c WRITE (*,*) 'On arrete !! - pbl en fin de ADVXP' 620 c STOP 621 c ENDIF 622 c 9999 CONTINUE 623 c ---------- bouclage cyclique 624 625 DO l = 1,llm 626 DO j = 1,jjp1 627 SM(iip1,j,l) = SM(1,j,l) 628 S0(iip1,j,l,ntra) = S0(1,j,l,ntra) 629 SSX(iip1,j,l,ntra) = SSX(1,j,l,ntra) 630 SY(iip1,j,l,ntra) = SY(1,j,l,ntra) 631 SZ(iip1,j,l,ntra) = SZ(1,j,l,ntra) 632 END DO 633 END DO 634 635 C ----------- qqtite totale de traceur dans tte l'atmosphere 636 DO l = 1, llm 637 DO j = 1, jjp1 638 DO i = 1, iim 639 sqf = sqf + S0(i,j,l,ntra) 640 END DO 641 END DO 642 END DO 643 644 PRINT*,'------ DIAG DANS ADVX2 - SORTIE -----' 645 PRINT*,'sqf=',sqf 646 c------------------------------------------------------------- 647 RETURN 648 END 291 ! 292 ! calculate flux and moments between adjacent boxes 293 ! 1- create temporary moments/masses for partial boxes in transit 294 ! 2- reajusts moments remaining in the box 295 ! 296 ! flux from IP to I if U(I).lt.0 297 ! 298 DO I=1,LONK-1 299 IF(UEXT(I).LT.0.) THEN 300 FM(I)=-UEXT(I)*DTX 301 ALF(I)=FM(I)/TM(I+1) 302 TM(I+1)=TM(I+1)-FM(I) 303 ENDIF 304 END DO 305 ! 306 I=LONK 307 IF(UEXT(I).LT.0.) THEN 308 FM(I)=-UEXT(I)*DTX 309 ALF(I)=FM(I)/TM(1) 310 TM(1)=TM(1)-FM(I) 311 ENDIF 312 ! 313 ! flux from I to IP if U(I).gt.0 314 ! 315 DO I=1,LONK 316 IF(UEXT(I).GE.0.) THEN 317 FM(I)=UEXT(I)*DTX 318 ALF(I)=FM(I)/TM(I) 319 TM(I)=TM(I)-FM(I) 320 ENDIF 321 END DO 322 ! 323 DO I=1,LONK 324 ALFQ(I)=ALF(I)*ALF(I) 325 ALF1(I)=1.-ALF(I) 326 ALF1Q(I)=ALF1(I)*ALF1(I) 327 ALF2(I)=ALF1(I)-ALF(I) 328 ALF3(I)=ALF(I)*ALFQ(I) 329 ALF4(I)=ALF1(I)*ALF1Q(I) 330 END DO 331 ! 332 DO JV=1,NTRA 333 DO I=1,LONK-1 334 ! 335 IF(UEXT(I).LT.0.) THEN 336 ! 337 F0 (I,JV)=ALF (I)* ( T0(I+1,JV)-ALF1(I)* & 338 ( TX(I+1,JV)-ALF2(I)*TXX(I+1,JV) ) ) 339 FX (I,JV)=ALFQ(I)*(TX(I+1,JV)-3.*ALF1(I)*TXX(I+1,JV)) 340 FXX(I,JV)=ALF3(I)*TXX(I+1,JV) 341 FY (I,JV)=ALF (I)*(TY(I+1,JV)-ALF1(I)*TXY(I+1,JV)) 342 FZ (I,JV)=ALF (I)*(TZ(I+1,JV)-ALF1(I)*TXZ(I+1,JV)) 343 FXY(I,JV)=ALFQ(I)*TXY(I+1,JV) 344 FXZ(I,JV)=ALFQ(I)*TXZ(I+1,JV) 345 FYY(I,JV)=ALF (I)*TYY(I+1,JV) 346 FYZ(I,JV)=ALF (I)*TYZ(I+1,JV) 347 FZZ(I,JV)=ALF (I)*TZZ(I+1,JV) 348 ! 349 T0 (I+1,JV)=T0(I+1,JV)-F0(I,JV) 350 TX (I+1,JV)=ALF1Q(I)*(TX(I+1,JV)+3.*ALF(I)*TXX(I+1,JV)) 351 TXX(I+1,JV)=ALF4(I)*TXX(I+1,JV) 352 TY (I+1,JV)=TY (I+1,JV)-FY (I,JV) 353 TZ (I+1,JV)=TZ (I+1,JV)-FZ (I,JV) 354 TYY(I+1,JV)=TYY(I+1,JV)-FYY(I,JV) 355 TYZ(I+1,JV)=TYZ(I+1,JV)-FYZ(I,JV) 356 TZZ(I+1,JV)=TZZ(I+1,JV)-FZZ(I,JV) 357 TXY(I+1,JV)=ALF1Q(I)*TXY(I+1,JV) 358 TXZ(I+1,JV)=ALF1Q(I)*TXZ(I+1,JV) 359 ! 360 ENDIF 361 ! 362 END DO 363 END DO 364 ! 365 I=LONK 366 IF(UEXT(I).LT.0.) THEN 367 ! 368 DO JV=1,NTRA 369 ! 370 F0 (I,JV)=ALF (I)* ( T0(1,JV)-ALF1(I)* & 371 ( TX(1,JV)-ALF2(I)*TXX(1,JV) ) ) 372 FX (I,JV)=ALFQ(I)*(TX(1,JV)-3.*ALF1(I)*TXX(1,JV)) 373 FXX(I,JV)=ALF3(I)*TXX(1,JV) 374 FY (I,JV)=ALF (I)*(TY(1,JV)-ALF1(I)*TXY(1,JV)) 375 FZ (I,JV)=ALF (I)*(TZ(1,JV)-ALF1(I)*TXZ(1,JV)) 376 FXY(I,JV)=ALFQ(I)*TXY(1,JV) 377 FXZ(I,JV)=ALFQ(I)*TXZ(1,JV) 378 FYY(I,JV)=ALF (I)*TYY(1,JV) 379 FYZ(I,JV)=ALF (I)*TYZ(1,JV) 380 FZZ(I,JV)=ALF (I)*TZZ(1,JV) 381 ! 382 T0 (1,JV)=T0(1,JV)-F0(I,JV) 383 TX (1,JV)=ALF1Q(I)*(TX(1,JV)+3.*ALF(I)*TXX(1,JV)) 384 TXX(1,JV)=ALF4(I)*TXX(1,JV) 385 TY (1,JV)=TY (1,JV)-FY (I,JV) 386 TZ (1,JV)=TZ (1,JV)-FZ (I,JV) 387 TYY(1,JV)=TYY(1,JV)-FYY(I,JV) 388 TYZ(1,JV)=TYZ(1,JV)-FYZ(I,JV) 389 TZZ(1,JV)=TZZ(1,JV)-FZZ(I,JV) 390 TXY(1,JV)=ALF1Q(I)*TXY(1,JV) 391 TXZ(1,JV)=ALF1Q(I)*TXZ(1,JV) 392 ! 393 END DO 394 ! 395 ENDIF 396 ! 397 DO JV=1,NTRA 398 DO I=1,LONK 399 ! 400 IF(UEXT(I).GE.0.) THEN 401 ! 402 F0 (I,JV)=ALF (I)* ( T0(I,JV)+ALF1(I)* & 403 ( TX(I,JV)+ALF2(I)*TXX(I,JV) ) ) 404 FX (I,JV)=ALFQ(I)*(TX(I,JV)+3.*ALF1(I)*TXX(I,JV)) 405 FXX(I,JV)=ALF3(I)*TXX(I,JV) 406 FY (I,JV)=ALF (I)*(TY(I,JV)+ALF1(I)*TXY(I,JV)) 407 FZ (I,JV)=ALF (I)*(TZ(I,JV)+ALF1(I)*TXZ(I,JV)) 408 FXY(I,JV)=ALFQ(I)*TXY(I,JV) 409 FXZ(I,JV)=ALFQ(I)*TXZ(I,JV) 410 FYY(I,JV)=ALF (I)*TYY(I,JV) 411 FYZ(I,JV)=ALF (I)*TYZ(I,JV) 412 FZZ(I,JV)=ALF (I)*TZZ(I,JV) 413 ! 414 T0 (I,JV)=T0(I,JV)-F0(I,JV) 415 TX (I,JV)=ALF1Q(I)*(TX(I,JV)-3.*ALF(I)*TXX(I,JV)) 416 TXX(I,JV)=ALF4(I)*TXX(I,JV) 417 TY (I,JV)=TY (I,JV)-FY (I,JV) 418 TZ (I,JV)=TZ (I,JV)-FZ (I,JV) 419 TYY(I,JV)=TYY(I,JV)-FYY(I,JV) 420 TYZ(I,JV)=TYZ(I,JV)-FYZ(I,JV) 421 TZZ(I,JV)=TZZ(I,JV)-FZZ(I,JV) 422 TXY(I,JV)=ALF1Q(I)*TXY(I,JV) 423 TXZ(I,JV)=ALF1Q(I)*TXZ(I,JV) 424 ! 425 ENDIF 426 ! 427 END DO 428 END DO 429 ! 430 ! puts the temporary moments Fi into appropriate neighboring boxes 431 ! 432 DO I=1,LONK 433 IF(UEXT(I).LT.0.) THEN 434 TM(I)=TM(I)+FM(I) 435 ALF(I)=FM(I)/TM(I) 436 ENDIF 437 END DO 438 ! 439 DO I=1,LONK-1 440 IF(UEXT(I).GE.0.) THEN 441 TM(I+1)=TM(I+1)+FM(I) 442 ALF(I)=FM(I)/TM(I+1) 443 ENDIF 444 END DO 445 ! 446 I=LONK 447 IF(UEXT(I).GE.0.) THEN 448 TM(1)=TM(1)+FM(I) 449 ALF(I)=FM(I)/TM(1) 450 ENDIF 451 ! 452 DO I=1,LONK 453 ALF1(I)=1.-ALF(I) 454 ALFQ(I)=ALF(I)*ALF(I) 455 ALF1Q(I)=ALF1(I)*ALF1(I) 456 ALF2(I)=ALF1(I)-ALF(I) 457 ALF3(I)=ALF(I)*ALF1(I) 458 END DO 459 ! 460 DO JV=1,NTRA 461 DO I=1,LONK 462 ! 463 IF(UEXT(I).LT.0.) THEN 464 ! 465 TEMPTM=-ALF(I)*T0(I,JV)+ALF1(I)*F0(I,JV) 466 T0 (I,JV)=T0(I,JV)+F0(I,JV) 467 TXX(I,JV)=ALFQ(I)*FXX(I,JV)+ALF1Q(I)*TXX(I,JV) & 468 +5.*( ALF3(I)*(FX(I,JV)-TX(I,JV))+ALF2(I)*TEMPTM ) 469 TX (I,JV)=ALF (I)*FX (I,JV)+ALF1(I)*TX (I,JV)+3.*TEMPTM 470 TXY(I,JV)=ALF (I)*FXY(I,JV)+ALF1(I)*TXY(I,JV) & 471 +3.*(ALF1(I)*FY (I,JV)-ALF (I)*TY (I,JV)) 472 TXZ(I,JV)=ALF (I)*FXZ(I,JV)+ALF1(I)*TXZ(I,JV) & 473 +3.*(ALF1(I)*FZ (I,JV)-ALF (I)*TZ (I,JV)) 474 TY (I,JV)=TY (I,JV)+FY (I,JV) 475 TZ (I,JV)=TZ (I,JV)+FZ (I,JV) 476 TYY(I,JV)=TYY(I,JV)+FYY(I,JV) 477 TYZ(I,JV)=TYZ(I,JV)+FYZ(I,JV) 478 TZZ(I,JV)=TZZ(I,JV)+FZZ(I,JV) 479 ! 480 ENDIF 481 ! 482 END DO 483 END DO 484 ! 485 DO JV=1,NTRA 486 DO I=1,LONK-1 487 ! 488 IF(UEXT(I).GE.0.) THEN 489 ! 490 TEMPTM=ALF(I)*T0(I+1,JV)-ALF1(I)*F0(I,JV) 491 T0 (I+1,JV)=T0(I+1,JV)+F0(I,JV) 492 TXX(I+1,JV)=ALFQ(I)*FXX(I,JV)+ALF1Q(I)*TXX(I+1,JV) & 493 +5.*( ALF3(I)*(TX(I+1,JV)-FX(I,JV))-ALF2(I)*TEMPTM ) 494 TX (I+1,JV)=ALF(I)*FX (I ,JV)+ALF1(I)*TX (I+1,JV)+3.*TEMPTM 495 TXY(I+1,JV)=ALF(I)*FXY(I ,JV)+ALF1(I)*TXY(I+1,JV) & 496 +3.*(ALF(I)*TY (I+1,JV)-ALF1(I)*FY (I ,JV)) 497 TXZ(I+1,JV)=ALF(I)*FXZ(I ,JV)+ALF1(I)*TXZ(I+1,JV) & 498 +3.*(ALF(I)*TZ (I+1,JV)-ALF1(I)*FZ (I ,JV)) 499 TY (I+1,JV)=TY (I+1,JV)+FY (I,JV) 500 TZ (I+1,JV)=TZ (I+1,JV)+FZ (I,JV) 501 TYY(I+1,JV)=TYY(I+1,JV)+FYY(I,JV) 502 TYZ(I+1,JV)=TYZ(I+1,JV)+FYZ(I,JV) 503 TZZ(I+1,JV)=TZZ(I+1,JV)+FZZ(I,JV) 504 ! 505 ENDIF 506 ! 507 END DO 508 END DO 509 ! 510 I=LONK 511 IF(UEXT(I).GE.0.) THEN 512 DO JV=1,NTRA 513 TEMPTM=ALF(I)*T0(1,JV)-ALF1(I)*F0(I,JV) 514 T0 (1,JV)=T0(1,JV)+F0(I,JV) 515 TXX(1,JV)=ALFQ(I)*FXX(I,JV)+ALF1Q(I)*TXX(1,JV) & 516 +5.*( ALF3(I)*(TX(1,JV)-FX(I,JV))-ALF2(I)*TEMPTM ) 517 TX (1,JV)=ALF(I)*FX(I,JV)+ALF1(I)*TX(1,JV)+3.*TEMPTM 518 TXY(1,JV)=ALF(I)*FXY(I,JV)+ALF1(I)*TXY(1,JV) & 519 +3.*(ALF(I)*TY (1,JV)-ALF1(I)*FY (I,JV)) 520 TXZ(1,JV)=ALF(I)*FXZ(I,JV)+ALF1(I)*TXZ(1,JV) & 521 +3.*(ALF(I)*TZ (1,JV)-ALF1(I)*FZ (I,JV)) 522 TY (1,JV)=TY (1,JV)+FY (I,JV) 523 TZ (1,JV)=TZ (1,JV)+FZ (I,JV) 524 TYY(1,JV)=TYY(1,JV)+FYY(I,JV) 525 TYZ(1,JV)=TYZ(1,JV)+FYZ(I,JV) 526 TZZ(1,JV)=TZZ(1,JV)+FZZ(I,JV) 527 END DO 528 ENDIF 529 ! 530 ! retour aux mailles d'origine (passage des Tij aux Sij) 531 ! 532 IF(NUMK.GT.1) THEN 533 ! 534 DO I2=1,NUMK 535 ! 536 DO I=1,LONK 537 ! 538 I3=I2+(I-1)*NUMK 539 SM(I3,K,L)=SMNEW(I3) 540 ALF(I)=SMNEW(I3)/TM(I) 541 TM(I)=TM(I)-SMNEW(I3) 542 ! 543 ALFQ(I)=ALF(I)*ALF(I) 544 ALF1(I)=1.-ALF(I) 545 ALF1Q(I)=ALF1(I)*ALF1(I) 546 ALF2(I)=ALF1(I)-ALF(I) 547 ALF3(I)=ALF(I)*ALFQ(I) 548 ALF4(I)=ALF1(I)*ALF1Q(I) 549 ! 550 END DO 551 ! 552 DO JV=1,NTRA 553 DO I=1,LONK 554 ! 555 I3=I2+(I-1)*NUMK 556 S0 (I3,K,L,JV)=ALF (I)* ( T0(I,JV)-ALF1(I)* & 557 ( TX(I,JV)-ALF2(I)*TXX(I,JV) ) ) 558 SSX (I3,K,L,JV)=ALFQ(I)*(TX(I,JV)-3.*ALF1(I)*TXX(I,JV)) 559 SSXX(I3,K,L,JV)=ALF3(I)*TXX(I,JV) 560 SY (I3,K,L,JV)=ALF (I)*(TY(I,JV)-ALF1(I)*TXY(I,JV)) 561 SZ (I3,K,L,JV)=ALF (I)*(TZ(I,JV)-ALF1(I)*TXZ(I,JV)) 562 SSXY(I3,K,L,JV)=ALFQ(I)*TXY(I,JV) 563 SSXZ(I3,K,L,JV)=ALFQ(I)*TXZ(I,JV) 564 SYY(I3,K,L,JV)=ALF (I)*TYY(I,JV) 565 SYZ(I3,K,L,JV)=ALF (I)*TYZ(I,JV) 566 SZZ(I3,K,L,JV)=ALF (I)*TZZ(I,JV) 567 ! 568 ! reajusts moments remaining in the box 569 ! 570 T0 (I,JV)=T0(I,JV)-S0(I3,K,L,JV) 571 TX (I,JV)=ALF1Q(I)*(TX(I,JV)+3.*ALF(I)*TXX(I,JV)) 572 TXX(I,JV)=ALF4 (I)*TXX(I,JV) 573 TY (I,JV)=TY (I,JV)-SY (I3,K,L,JV) 574 TZ (I,JV)=TZ (I,JV)-SZ (I3,K,L,JV) 575 TYY(I,JV)=TYY(I,JV)-SYY(I3,K,L,JV) 576 TYZ(I,JV)=TYZ(I,JV)-SYZ(I3,K,L,JV) 577 TZZ(I,JV)=TZZ(I,JV)-SZZ(I3,K,L,JV) 578 TXY(I,JV)=ALF1Q(I)*TXY(I,JV) 579 TXZ(I,JV)=ALF1Q(I)*TXZ(I,JV) 580 ! 581 END DO 582 END DO 583 ! 584 END DO 585 ! 586 ELSE 587 ! 588 DO I=1,LON 589 SM(I,K,L)=TM(I) 590 END DO 591 DO JV=1,NTRA 592 DO I=1,LON 593 S0 (I,K,L,JV)=T0 (I,JV) 594 SSX (I,K,L,JV)=TX (I,JV) 595 SY (I,K,L,JV)=TY (I,JV) 596 SZ (I,K,L,JV)=TZ (I,JV) 597 SSXX(I,K,L,JV)=TXX(I,JV) 598 SSXY(I,K,L,JV)=TXY(I,JV) 599 SSXZ(I,K,L,JV)=TXZ(I,JV) 600 SYY(I,K,L,JV)=TYY(I,JV) 601 SYZ(I,K,L,JV)=TYZ(I,JV) 602 SZZ(I,K,L,JV)=TZZ(I,JV) 603 END DO 604 END DO 605 ! 606 ENDIF 607 ! 608 END DO 609 END DO 610 ! 611 ! ----------- AA Test en fin de ADVX ------ Controle des S* 612 613 ! DO 9999 l = 1, llm 614 ! DO 9999 j = 1, jjp1 615 ! DO 9999 i = 1, iip1 616 ! IF (S0(i,j,l,ntra).lt.0..and.LIMIT) THEN 617 ! PRINT*, '-------------------' 618 ! PRINT*, 'En fin de ADVXP' 619 ! PRINT*,'S0(',i,j,l,')=',S0(i,j,l,ntra) 620 ! print*, 'SSX(',i,j,l,')=',SSX(i,j,l,ntra) 621 ! print*, 'SY(',i,j,l,')=',SY(i,j,l,ntra) 622 ! print*, 'SZ(',i,j,l,')=',SZ(i,j,l,ntra) 623 ! WRITE (*,*) 'On arrete !! - pbl en fin de ADVXP' 624 ! STOP 625 ! ENDIF 626 ! 9999 CONTINUE 627 ! ---------- bouclage cyclique 628 629 DO l = 1,llm 630 DO j = 1,jjp1 631 SM(iip1,j,l) = SM(1,j,l) 632 S0(iip1,j,l,ntra) = S0(1,j,l,ntra) 633 SSX(iip1,j,l,ntra) = SSX(1,j,l,ntra) 634 SY(iip1,j,l,ntra) = SY(1,j,l,ntra) 635 SZ(iip1,j,l,ntra) = SZ(1,j,l,ntra) 636 END DO 637 END DO 638 639 ! ----------- qqtite totale de traceur dans tte l'atmosphere 640 DO l = 1, llm 641 DO j = 1, jjp1 642 DO i = 1, iim 643 sqf = sqf + S0(i,j,l,ntra) 644 END DO 645 END DO 646 END DO 647 648 PRINT*,'------ DIAG DANS ADVX2 - SORTIE -----' 649 PRINT*,'sqf=',sqf 650 !------------------------------------------------------------- 651 RETURN 652 END SUBROUTINE ADVXP
Note: See TracChangeset
for help on using the changeset viewer.