Changeset 14944
- Timestamp:
- 2021-06-03T17:16:52+02:00 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/DYN/dynspg_ts.F90
r14649 r14944 86 86 REAL(wp) :: r1_2 = 0.5_wp ! 87 87 88 89 INTERFACE dyn_drg_init 90 MODULE PROCEDURE dyn_drg_init_wp, dyn_drg_init_mixed 91 END INTERFACE 92 88 93 !! * Substitutions 89 94 # include "do_loop_substitute.h90" … … 1342 1347 1343 1348 1344 SUBROUTINE dyn_drg_init ( Kbb, Kmm, puu, pvv, puu_b ,pvv_b, pu_RHSi, pv_RHSi, pCdU_u, pCdU_v )1349 SUBROUTINE dyn_drg_init_wp( Kbb, Kmm, puu, pvv, puu_b ,pvv_b, pu_RHSi, pv_RHSi, pCdU_u, pCdU_v ) 1345 1350 !!---------------------------------------------------------------------- 1346 1351 !! *** ROUTINE dyn_drg_init *** … … 1446 1451 ENDIF 1447 1452 ! 1448 END SUBROUTINE dyn_drg_init 1453 END SUBROUTINE dyn_drg_init_wp 1454 1455 SUBROUTINE dyn_drg_init_mixed( Kbb, Kmm, puu, pvv, puu_b ,pvv_b, pu_RHSi, pv_RHSi, pCdU_u, pCdU_v ) 1456 !!---------------------------------------------------------------------- 1457 !! *** ROUTINE dyn_drg_init *** 1458 !! 1459 !! ** Purpose : - add the baroclinic top/bottom drag contribution to 1460 !! the baroclinic part of the barotropic RHS 1461 !! - compute the barotropic drag coefficients 1462 !! 1463 !! ** Method : computation done over the INNER domain only 1464 !!---------------------------------------------------------------------- 1465 INTEGER , INTENT(in ) :: Kbb, Kmm ! ocean time level indices 1466 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(in ) :: puu, pvv ! ocean velocities and RHS of momentum equation 1467 REAL(sp), DIMENSION(jpi,jpj,jpt) , INTENT(in ) :: puu_b, pvv_b ! barotropic velocities at main time levels 1468 REAL(sp), DIMENSION(jpi,jpj) , INTENT(inout) :: pu_RHSi, pv_RHSi ! baroclinic part of the barotropic RHS 1469 REAL(sp), DIMENSION(jpi,jpj) , INTENT( out) :: pCdU_u , pCdU_v ! barotropic drag coefficients 1470 ! 1471 INTEGER :: ji, jj ! dummy loop indices 1472 INTEGER :: ikbu, ikbv, iktu, iktv 1473 REAL(sp) :: zztmp 1474 REAL(sp), DIMENSION(jpi,jpj) :: zu_i, zv_i 1475 !!---------------------------------------------------------------------- 1476 ! 1477 ! !== Set the barotropic drag coef. ==! 1478 ! 1479 IF( ln_isfcav.OR.ln_drgice_imp ) THEN ! top+bottom friction (ocean cavities) 1480 1481 DO_2D( 0, 0, 0, 0 ) 1482 pCdU_u(ji,jj) = r1_2*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) + rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) 1483 pCdU_v(ji,jj) = r1_2*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) + rCdU_top(ji,jj+1)+rCdU_top(ji,jj) ) 1484 END_2D 1485 ELSE ! bottom friction only 1486 DO_2D( 0, 0, 0, 0 ) 1487 pCdU_u(ji,jj) = r1_2*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) 1488 pCdU_v(ji,jj) = r1_2*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) 1489 END_2D 1490 ENDIF 1491 ! 1492 ! !== BOTTOM stress contribution from baroclinic velocities ==! 1493 ! 1494 IF( ln_bt_fw ) THEN ! FORWARD integration: use NOW bottom baroclinic velocities 1495 1496 DO_2D( 0, 0, 0, 0 ) 1497 ikbu = mbku(ji,jj) 1498 ikbv = mbkv(ji,jj) 1499 zu_i(ji,jj) = puu(ji,jj,ikbu,Kmm) - puu_b(ji,jj,Kmm) 1500 zv_i(ji,jj) = pvv(ji,jj,ikbv,Kmm) - pvv_b(ji,jj,Kmm) 1501 END_2D 1502 ELSE ! CENTRED integration: use BEFORE bottom baroclinic velocities 1503 1504 DO_2D( 0, 0, 0, 0 ) 1505 ikbu = mbku(ji,jj) 1506 ikbv = mbkv(ji,jj) 1507 zu_i(ji,jj) = puu(ji,jj,ikbu,Kbb) - puu_b(ji,jj,Kbb) 1508 zv_i(ji,jj) = pvv(ji,jj,ikbv,Kbb) - pvv_b(ji,jj,Kbb) 1509 END_2D 1510 ENDIF 1511 ! 1512 IF( ln_wd_il ) THEN ! W/D : use the "clipped" bottom friction !!gm explain WHY, please ! 1513 zztmp = -1._wp / rDt_e 1514 DO_2D( 0, 0, 0, 0 ) 1515 pu_RHSi(ji,jj) = pu_RHSi(ji,jj) + zu_i(ji,jj) * wdrampu(ji,jj) * MAX( & 1516 & r1_hu(ji,jj,Kmm) * r1_2*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) , zztmp ) 1517 pv_RHSi(ji,jj) = pv_RHSi(ji,jj) + zv_i(ji,jj) * wdrampv(ji,jj) * MAX( & 1518 & r1_hv(ji,jj,Kmm) * r1_2*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) , zztmp ) 1519 END_2D 1520 ELSE ! use "unclipped" drag (even if explicit friction is used in 3D calculation) 1521 1522 DO_2D( 0, 0, 0, 0 ) 1523 pu_RHSi(ji,jj) = pu_RHSi(ji,jj) + r1_hu(ji,jj,Kmm) * r1_2*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) * zu_i(ji,jj) 1524 pv_RHSi(ji,jj) = pv_RHSi(ji,jj) + r1_hv(ji,jj,Kmm) * r1_2*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) * zv_i(ji,jj) 1525 END_2D 1526 END IF 1527 ! 1528 ! !== TOP stress contribution from baroclinic velocities ==! (no W/D case) 1529 ! 1530 IF( ln_isfcav.OR.ln_drgice_imp ) THEN 1531 ! 1532 IF( ln_bt_fw ) THEN ! FORWARD integration: use NOW top baroclinic velocity 1533 1534 DO_2D( 0, 0, 0, 0 ) 1535 iktu = miku(ji,jj) 1536 iktv = mikv(ji,jj) 1537 zu_i(ji,jj) = puu(ji,jj,iktu,Kmm) - puu_b(ji,jj,Kmm) 1538 zv_i(ji,jj) = pvv(ji,jj,iktv,Kmm) - pvv_b(ji,jj,Kmm) 1539 END_2D 1540 ELSE ! CENTRED integration: use BEFORE top baroclinic velocity 1541 1542 DO_2D( 0, 0, 0, 0 ) 1543 iktu = miku(ji,jj) 1544 iktv = mikv(ji,jj) 1545 zu_i(ji,jj) = puu(ji,jj,iktu,Kbb) - puu_b(ji,jj,Kbb) 1546 zv_i(ji,jj) = pvv(ji,jj,iktv,Kbb) - pvv_b(ji,jj,Kbb) 1547 END_2D 1548 ENDIF 1549 ! 1550 ! ! use "unclipped" top drag (even if explicit friction is used in 3D calculation) 1551 1552 DO_2D( 0, 0, 0, 0 ) 1553 pu_RHSi(ji,jj) = pu_RHSi(ji,jj) + r1_hu(ji,jj,Kmm) * r1_2*( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) * zu_i(ji,jj) 1554 pv_RHSi(ji,jj) = pv_RHSi(ji,jj) + r1_hv(ji,jj,Kmm) * r1_2*( rCdU_top(ji,jj+1)+rCdU_top(ji,jj) ) * zv_i(ji,jj) 1555 END_2D 1556 ! 1557 ENDIF 1558 ! 1559 END SUBROUTINE dyn_drg_init_mixed 1449 1560 1450 1561 SUBROUTINE ts_bck_interp( jn, ll_init, & ! <== in
Note: See TracChangeset
for help on using the changeset viewer.