- Timestamp:
- Nov 17, 2025, 3:50:06 PM (3 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/climb_wind_mod.f90
r5296 r5868 73 73 !**************************************************************************************** 74 74 ! 75 SUBROUTINE climb_wind_down(knon, dtime, coef_in, pplay, paprs, temp, delp, u_old, v_old, &75 SUBROUTINE climb_wind_down(knon, ni, dtime, coef_in, pplay, paprs, temp, delp, u_old, v_old, & 76 76 !!! nrlmd le 02/05/2011 77 77 Ccoef_U_out, Ccoef_V_out, Dcoef_U_out, Dcoef_V_out, & … … 90 90 !**************************************************************************************** 91 91 INTEGER, INTENT(IN) :: knon 92 INTEGER, INTENT(IN) :: ni(knon) 92 93 REAL, INTENT(IN) :: dtime 93 REAL, DIMENSION(k lon,klev), INTENT(IN) :: coef_in94 REAL, DIMENSION(k lon,klev), INTENT(IN) :: pplay ! pres au milieu de couche (Pa)95 REAL, DIMENSION(k lon,klev+1), INTENT(IN) :: paprs ! pression a inter-couche (Pa)96 REAL, DIMENSION(k lon,klev), INTENT(IN) :: temp ! temperature97 REAL, DIMENSION(k lon,klev), INTENT(IN) :: delp98 REAL, DIMENSION(k lon,klev), INTENT(IN) :: u_old99 REAL, DIMENSION(k lon,klev), INTENT(IN) :: v_old94 REAL, DIMENSION(knon,klev), INTENT(IN) :: coef_in 95 REAL, DIMENSION(knon,klev), INTENT(IN) :: pplay ! pres au milieu de couche (Pa) 96 REAL, DIMENSION(knon,klev+1), INTENT(IN) :: paprs ! pression a inter-couche (Pa) 97 REAL, DIMENSION(knon,klev), INTENT(IN) :: temp ! temperature 98 REAL, DIMENSION(knon,klev), INTENT(IN) :: delp 99 REAL, DIMENSION(knon,klev), INTENT(IN) :: u_old 100 REAL, DIMENSION(knon,klev), INTENT(IN) :: v_old 100 101 101 102 ! Output arguments 102 103 !**************************************************************************************** 103 REAL, DIMENSION(k lon), INTENT(OUT) :: Acoef_U_out104 REAL, DIMENSION(k lon), INTENT(OUT) :: Acoef_V_out105 REAL, DIMENSION(k lon), INTENT(OUT) :: Bcoef_U_out106 REAL, DIMENSION(k lon), INTENT(OUT) :: Bcoef_V_out107 108 !!! nrlmd le 02/05/2011 109 REAL, DIMENSION(k lon,klev), INTENT(OUT) :: Ccoef_U_out110 REAL, DIMENSION(k lon,klev), INTENT(OUT) :: Ccoef_V_out111 REAL, DIMENSION(k lon,klev), INTENT(OUT) :: Dcoef_U_out112 REAL, DIMENSION(k lon,klev), INTENT(OUT) :: Dcoef_V_out113 REAL, DIMENSION(k lon,klev), INTENT(OUT) :: Kcoef_m_out114 REAL, DIMENSION(k lon), INTENT(OUT) :: alf_1_out115 REAL, DIMENSION(k lon), INTENT(OUT) :: alf_2_out104 REAL, DIMENSION(knon), INTENT(OUT) :: Acoef_U_out 105 REAL, DIMENSION(knon), INTENT(OUT) :: Acoef_V_out 106 REAL, DIMENSION(knon), INTENT(OUT) :: Bcoef_U_out 107 REAL, DIMENSION(knon), INTENT(OUT) :: Bcoef_V_out 108 109 !!! nrlmd le 02/05/2011 110 REAL, DIMENSION(knon,klev), INTENT(OUT) :: Ccoef_U_out 111 REAL, DIMENSION(knon,klev), INTENT(OUT) :: Ccoef_V_out 112 REAL, DIMENSION(knon,klev), INTENT(OUT) :: Dcoef_U_out 113 REAL, DIMENSION(knon,klev), INTENT(OUT) :: Dcoef_V_out 114 REAL, DIMENSION(knon,klev), INTENT(OUT) :: Kcoef_m_out 115 REAL, DIMENSION(knon), INTENT(OUT) :: alf_1_out 116 REAL, DIMENSION(knon), INTENT(OUT) :: alf_2_out 116 117 !!! 117 118 118 119 ! Local variables 119 120 !**************************************************************************************** 120 REAL, DIMENSION(klon) :: u1lay, v1lay 121 INTEGER :: k, i 121 REAL :: yalf1(knon) 122 REAL :: yalf2(knon) 123 REAL :: yKcoefm(knon,klev) 124 REAL :: yCcoef_U(knon,klev) 125 REAL :: yDcoef_U(knon,klev) 126 REAL :: yCcoef_V(knon,klev) 127 REAL :: yDcoef_V(knon,klev) 128 REAL :: yAcoef_U(knon), yBcoef_U(knon), yAcoef_V(knon), yBcoef_V(knon) 129 130 REAL, DIMENSION(knon) :: u1lay, v1lay 131 INTEGER :: k, i, j 132 122 133 !**************************************************************************************** 123 134 ! Initialize module … … 129 140 !**************************************************************************************** 130 141 ! - Define alpha (alf1 and alf2) 131 alf1(:) = 1.0132 alf2(:) = 1.0 -alf1(:)142 yalf1(:) = 1.0 143 yalf2(:) = 1.0 - yalf1(:) 133 144 134 145 ! - Calculate the coefficients K 135 Kcoefm(:,:) = 0.0146 yKcoefm(:,:) = 0.0 136 147 DO k = 2, klev 137 148 DO i=1,knon 138 Kcoefm(i,k) = coef_in(i,k)*RG*RG*dtime/(pplay(i,k-1)-pplay(i,k)) &149 yKcoefm(i,k) = coef_in(i,k)*RG*RG*dtime/(pplay(i,k-1)-pplay(i,k)) & 139 150 *(paprs(i,k)*2/(temp(i,k)+temp(i,k-1))/RD)**2 140 151 END DO … … 142 153 143 154 ! - Calculate the coefficients C and D, component "u" 144 CALL calc_coef(knon, Kcoefm(:,:), delp(:,:), &145 u_old(:,:), alf1(:),alf2(:), &146 Ccoef_U(:,:), Dcoef_U(:,:), Acoef_U(:),Bcoef_U(:))155 CALL calc_coef(knon, yKcoefm(:,:), delp(:,:), & 156 u_old(:,:), yalf1(:), yalf2(:), & 157 yCcoef_U(:,:), yDcoef_U(:,:), yAcoef_U(:), yBcoef_U(:)) 147 158 148 159 ! - Calculate the coefficients C and D, component "v" 149 CALL calc_coef(knon, Kcoefm(:,:), delp(:,:), &150 v_old(:,:), alf1(:),alf2(:), &151 Ccoef_V(:,:), Dcoef_V(:,:), Acoef_V(:),Bcoef_V(:))160 CALL calc_coef(knon, yKcoefm(:,:), delp(:,:), & 161 v_old(:,:), yalf1(:), yalf2(:), & 162 yCcoef_V(:,:), yDcoef_V(:,:), yAcoef_V(:), yBcoef_V(:)) 152 163 153 164 !**************************************************************************************** … … 156 167 ! 157 168 !**************************************************************************************** 158 Acoef_U_out = Acoef_U159 Bcoef_U_out = Bcoef_U160 Acoef_V_out = Acoef_V161 Bcoef_V_out = Bcoef_V169 Acoef_U_out = yAcoef_U 170 Bcoef_U_out = yBcoef_U 171 Acoef_V_out = yAcoef_V 172 Bcoef_V_out = yBcoef_V 162 173 163 174 !**************************************************************************************** … … 171 182 !!! nrlmd le 02/05/2011 172 183 DO k= 1, klev 173 DO i= 1, k lon174 Ccoef_U_out(i,k) = Ccoef_U(i,k)175 Ccoef_V_out(i,k) = Ccoef_V(i,k)176 Dcoef_U_out(i,k) = Dcoef_U(i,k)177 Dcoef_V_out(i,k) = Dcoef_V(i,k)178 Kcoef_m_out(i,k) = Kcoefm(i,k)184 DO i= 1, knon 185 Ccoef_U_out(i,k) = yCcoef_U(i,k) 186 Ccoef_V_out(i,k) = yCcoef_V(i,k) 187 Dcoef_U_out(i,k) = yDcoef_U(i,k) 188 Dcoef_V_out(i,k) = yDcoef_V(i,k) 189 Kcoef_m_out(i,k) = yKcoefm(i,k) 179 190 ENDDO 180 191 ENDDO 181 DO i= 1, k lon182 alf_1_out(i) = alf1(i)183 alf_2_out(i) = alf2(i)192 DO i= 1, knon 193 alf_1_out(i) = yalf1(i) 194 alf_2_out(i) = yalf2(i) 184 195 ENDDO 185 196 !!! 186 197 ENDIF ! (mod(iflag_pbl_split,2) .ge.1) 187 198 !!! 188 199 DO j= 1, knon 200 i=ni(j) 201 Acoef_U(i) = yAcoef_U(j) 202 Bcoef_U(i) = yBcoef_U(j) 203 Acoef_V(i) = yAcoef_V(j) 204 Bcoef_V(i) = yBcoef_V(j) 205 ENDDO 206 207 DO k= 1, klev 208 DO j= 1, knon 209 i=ni(j) 210 Ccoef_U(i,k) = yCcoef_U(j,k) 211 Ccoef_V(i,k) = yCcoef_V(j,k) 212 Dcoef_U(i,k) = yDcoef_U(j,k) 213 Dcoef_V(i,k) = yDcoef_V(j,k) 214 Kcoefm(i,k) = yKcoefm(j,k) 215 alf1(i) = yalf1(j) 216 alf2(i) = yalf2(j) 217 ENDDO 218 ENDDO 189 219 END SUBROUTINE climb_wind_down 190 220 ! … … 198 228 !**************************************************************************************** 199 229 INTEGER, INTENT(IN) :: knon 200 REAL, DIMENSION(k lon,klev), INTENT(IN) :: Kcoef, delp201 REAL, DIMENSION(k lon,klev), INTENT(IN) :: X202 REAL, DIMENSION(k lon), INTENT(IN) :: alfa1, alfa2230 REAL, DIMENSION(knon,klev), INTENT(IN) :: Kcoef, delp 231 REAL, DIMENSION(knon,klev), INTENT(IN) :: X 232 REAL, DIMENSION(knon), INTENT(IN) :: alfa1, alfa2 203 233 204 234 ! Output arguments 205 235 !**************************************************************************************** 206 REAL, DIMENSION(k lon), INTENT(OUT) :: Acoef, Bcoef207 REAL, DIMENSION(k lon,klev), INTENT(OUT) :: Ccoef, Dcoef236 REAL, DIMENSION(knon), INTENT(OUT) :: Acoef, Bcoef 237 REAL, DIMENSION(knon,klev), INTENT(OUT) :: Ccoef, Dcoef 208 238 209 239 ! local variables 210 240 !**************************************************************************************** 211 INTEGER :: k, i 241 INTEGER :: k, i, j 212 242 REAL :: buf 213 243 !**************************************************************************************** … … 252 282 ! 253 283 254 SUBROUTINE climb_wind_up(knon, dtime, u_old, v_old, flx_u1, flx_v1, &284 SUBROUTINE climb_wind_up(knon, ni, dtime, u_old, v_old, flx_u1, flx_v1, & 255 285 !!! nrlmd le 02/05/2011 256 286 Acoef_U_in, Acoef_V_in, Bcoef_U_in, Bcoef_V_in, & … … 273 303 !**************************************************************************************** 274 304 INTEGER, INTENT(IN) :: knon 305 INTEGER, INTENT(IN) :: ni(knon) 275 306 REAL, INTENT(IN) :: dtime 276 REAL, DIMENSION(k lon,klev), INTENT(IN) :: u_old277 REAL, DIMENSION(k lon,klev), INTENT(IN) :: v_old278 REAL, DIMENSION(k lon), INTENT(IN) :: flx_u1, flx_v1 ! momentum flux279 280 !!! nrlmd le 02/05/2011 281 REAL, DIMENSION(k lon), INTENT(IN) :: Acoef_U_in,Acoef_V_in, Bcoef_U_in, Bcoef_V_in282 REAL, DIMENSION(k lon,klev), INTENT(IN) :: Ccoef_U_in, Ccoef_V_in, Dcoef_U_in, Dcoef_V_in283 REAL, DIMENSION(k lon,klev), INTENT(IN) :: Kcoef_m_in307 REAL, DIMENSION(knon,klev), INTENT(IN) :: u_old 308 REAL, DIMENSION(knon,klev), INTENT(IN) :: v_old 309 REAL, DIMENSION(knon), INTENT(IN) :: flx_u1, flx_v1 ! momentum flux 310 311 !!! nrlmd le 02/05/2011 312 REAL, DIMENSION(knon), INTENT(IN) :: Acoef_U_in,Acoef_V_in, Bcoef_U_in, Bcoef_V_in 313 REAL, DIMENSION(knon,klev), INTENT(IN) :: Ccoef_U_in, Ccoef_V_in, Dcoef_U_in, Dcoef_V_in 314 REAL, DIMENSION(knon,klev), INTENT(IN) :: Kcoef_m_in 284 315 !!! 285 316 286 317 ! Output arguments 287 318 !**************************************************************************************** 288 REAL, DIMENSION(k lon,klev), INTENT(OUT) :: flx_u_new, flx_v_new289 REAL, DIMENSION(k lon,klev), INTENT(OUT) :: d_u_new, d_v_new319 REAL, DIMENSION(knon,klev), INTENT(OUT) :: flx_u_new, flx_v_new 320 REAL, DIMENSION(knon,klev), INTENT(OUT) :: d_u_new, d_v_new 290 321 291 322 ! Local variables 292 323 !**************************************************************************************** 293 REAL, DIMENSION(klon,klev) :: u_new, v_new 294 INTEGER :: k, i 324 REAL :: yalf1(knon) 325 REAL :: yalf2(knon) 326 REAL :: yKcoefm(knon,klev) 327 REAL :: yCcoef_U(knon,klev) 328 REAL :: yDcoef_U(knon,klev) 329 REAL :: yCcoef_V(knon,klev) 330 REAL :: yDcoef_V(knon,klev) 331 REAL :: yAcoef_U(knon), yBcoef_U(knon), yAcoef_V(knon), yBcoef_V(knon) 332 333 REAL, DIMENSION(knon,klev) :: u_new, v_new 334 INTEGER :: k, i, j 295 335 !**************************************************************************************** 296 336 … … 300 340 !!! nrlmd le 02/05/2011 301 341 DO i = 1, knon 302 Acoef_U(i)=Acoef_U_in(i)303 Acoef_V(i)=Acoef_V_in(i)304 Bcoef_U(i)=Bcoef_U_in(i)305 Bcoef_V(i)=Bcoef_V_in(i)342 yAcoef_U(i)=Acoef_U_in(i) 343 yAcoef_V(i)=Acoef_V_in(i) 344 yBcoef_U(i)=Bcoef_U_in(i) 345 yBcoef_V(i)=Bcoef_V_in(i) 306 346 ENDDO 307 347 DO k = 1, klev 308 348 DO i = 1, knon 309 Ccoef_U(i,k)=Ccoef_U_in(i,k)310 Ccoef_V(i,k)=Ccoef_V_in(i,k)311 Dcoef_U(i,k)=Dcoef_U_in(i,k)312 Dcoef_V(i,k)=Dcoef_V_in(i,k)313 Kcoefm(i,k)=Kcoef_m_in(i,k)349 yCcoef_U(i,k)=Ccoef_U_in(i,k) 350 yCcoef_V(i,k)=Ccoef_V_in(i,k) 351 yDcoef_U(i,k)=Dcoef_U_in(i,k) 352 yDcoef_V(i,k)=Dcoef_V_in(i,k) 353 yKcoefm(i,k)=Kcoef_m_in(i,k) 314 354 ENDDO 315 355 ENDDO 356 ELSE 357 DO j = 1, knon 358 i=ni(j) 359 yAcoef_U(j)=Acoef_U(i) 360 yAcoef_V(j)=Acoef_V(i) 361 yBcoef_U(j)=Bcoef_U(i) 362 yBcoef_V(j)=Bcoef_V(i) 363 ENDDO 364 DO k = 1, klev 365 DO j = 1, knon 366 i=ni(j) 367 yCcoef_U(j,k)=Ccoef_U(i,k) 368 yCcoef_V(j,k)=Ccoef_V(i,k) 369 yDcoef_U(j,k)=Dcoef_U(i,k) 370 yDcoef_V(j,k)=Dcoef_V(i,k) 371 yKcoefm(j,k)=Kcoefm(i,k) 372 ENDDO 373 ENDDO 316 374 !!! 317 375 ENDIF ! (mod(iflag_pbl_split,2) .ge.1) … … 320 378 ! Niveau 1 321 379 DO i = 1, knon 322 u_new(i,1) = Acoef_U(i) +Bcoef_U(i)*flx_u1(i)*dtime323 v_new(i,1) = Acoef_V(i) +Bcoef_V(i)*flx_v1(i)*dtime380 u_new(i,1) = yAcoef_U(i) + yBcoef_U(i)*flx_u1(i)*dtime 381 v_new(i,1) = yAcoef_V(i) + yBcoef_V(i)*flx_v1(i)*dtime 324 382 END DO 325 383 … … 327 385 DO k = 2, klev 328 386 DO i=1, knon 329 u_new(i,k) = Ccoef_U(i,k) +Dcoef_U(i,k) * u_new(i,k-1)330 v_new(i,k) = Ccoef_V(i,k) +Dcoef_V(i,k) * v_new(i,k-1)387 u_new(i,k) = yCcoef_U(i,k) + yDcoef_U(i,k) * u_new(i,k-1) 388 v_new(i,k) = yCcoef_V(i,k) + yDcoef_V(i,k) * v_new(i,k-1) 331 389 END DO 332 390 END DO … … 349 407 DO k = 2, klev 350 408 DO i = 1, knon 351 flx_u_new(i,k) = Kcoefm(i,k)/RG/dtime * &409 flx_u_new(i,k) = yKcoefm(i,k)/RG/dtime * & 352 410 (u_new(i,k)-u_new(i,k-1)) 353 411 354 flx_v_new(i,k) = Kcoefm(i,k)/RG/dtime * &412 flx_v_new(i,k) = yKcoefm(i,k)/RG/dtime * & 355 413 (v_new(i,k)-v_new(i,k-1)) 356 414 END DO … … 370 428 END DO 371 429 430 DO j = 1, knon 431 i=ni(j) 432 Acoef_U(i)=yAcoef_U(j) 433 Acoef_V(i)=yAcoef_V(j) 434 Bcoef_U(i)=yBcoef_U(j) 435 Bcoef_V(i)=yBcoef_V(j) 436 ENDDO 437 438 DO k = 1, klev 439 DO j = 1, knon 440 i=ni(j) 441 Ccoef_U(i,k) = yCcoef_U(j,k) 442 Ccoef_V(i,k) = yCcoef_V(j,k) 443 Dcoef_U(i,k) = yDcoef_U(j,k) 444 Dcoef_V(i,k) = yDcoef_V(j,k) 445 Kcoefm(i,k) = yKcoefm(j,k) 446 ENDDO 447 ENDDO 448 372 449 END SUBROUTINE climb_wind_up 373 450 !
Note: See TracChangeset
for help on using the changeset viewer.
