|
@@ -923,6 +923,13 @@ CONTAINS
|
|
|
! ! ========================= !
|
|
|
! define frcv(jpr_otx1)%z3(:,:,1) and frcv(jpr_oty1)%z3(:,:,1): stress at U/V point along model grid
|
|
|
! => need to be done only when we receive the field
|
|
|
+ !
|
|
|
+ ! ocean stress components (jpr_otx1) : T
|
|
|
+ ! oasis_rcv: nrcvinfo 1
|
|
|
+ ! oasis_rcv: clvref spherical
|
|
|
+ ! oasis_rcv: clvor eastward-northward
|
|
|
+ ! oasis_rcv: clgrid U
|
|
|
+ !
|
|
|
IF( nrcvinfo(jpr_otx1) == OASIS_Rcv ) THEN
|
|
|
!
|
|
|
IF( TRIM( sn_rcv_tau%clvref ) == 'cartesian' ) THEN ! 2 components on the sphere
|
|
@@ -972,25 +979,29 @@ CONTAINS
|
|
|
|
|
|
CALL fld_read( kt, k_fsbc, sf_tau_anom )
|
|
|
|
|
|
- IF(lwp) THEN ! control print
|
|
|
- WRITE(numout,*)
|
|
|
- WRITE(numout,*) ' Overwrite tau_u and tau_v with anomalies files : '
|
|
|
- WRITE(numout,*) ' ocean model time step index and frequency of sbc '
|
|
|
- WRITE(numout,*) kt
|
|
|
- ENDIF
|
|
|
DO jj = 1, jpj
|
|
|
DO ji = 1, jpi
|
|
|
frcv(jpr_otx1)%z3(ji,jj,1) = frcv(jpr_otx1)%z3(ji,jj,1) + sf_tau_anom(1)%fnow(ji,jj,1)
|
|
|
frcv(jpr_oty1)%z3(ji,jj,1) = frcv(jpr_oty1)%z3(ji,jj,1) + sf_tau_anom(2)%fnow(ji,jj,1)
|
|
|
END DO
|
|
|
END DO
|
|
|
+ llnewtx = .TRUE.
|
|
|
+
|
|
|
ENDIF
|
|
|
- !
|
|
|
! ! ========================= !
|
|
|
ELSE ! No dynamical coupling !
|
|
|
! ! ========================= !
|
|
|
frcv(jpr_otx1)%z3(:,:,1) = 0.e0 ! here simply set to zero
|
|
|
frcv(jpr_oty1)%z3(:,:,1) = 0.e0 ! an external read in a file can be added instead
|
|
|
+ !
|
|
|
+ IF( ln_force_windstress ) THEN
|
|
|
+ DO jj = 1, jpj
|
|
|
+ DO ji = 1, jpi
|
|
|
+ frcv(jpr_otx1)%z3(ji,jj,1) = sf_tau_anom(1)%fnow(ji,jj,1)
|
|
|
+ frcv(jpr_oty1)%z3(ji,jj,1) = sf_tau_anom(2)%fnow(ji,jj,1)
|
|
|
+ END DO
|
|
|
+ END DO
|
|
|
+ ENDIF
|
|
|
llnewtx = .TRUE.
|
|
|
!
|
|
|
ENDIF
|
|
@@ -998,49 +1009,74 @@ CONTAINS
|
|
|
! ! wind stress module ! (taum)
|
|
|
! ! ========================= !
|
|
|
!
|
|
|
- IF( .NOT. srcv(jpr_taum)%laction ) THEN ! compute wind stress module from its components if not received
|
|
|
- ! => need to be done only when otx1 was changed
|
|
|
- IF( llnewtx ) THEN
|
|
|
+ IF( ln_force_windstress ) THEN
|
|
|
!CDIR NOVERRCHK
|
|
|
- DO jj = 2, jpjm1
|
|
|
+ DO jj = 2, jpjm1
|
|
|
!CDIR NOVERRCHK
|
|
|
- DO ji = fs_2, fs_jpim1 ! vect. opt.
|
|
|
- zzx = frcv(jpr_otx1)%z3(ji-1,jj ,1) + frcv(jpr_otx1)%z3(ji,jj,1)
|
|
|
- zzy = frcv(jpr_oty1)%z3(ji ,jj-1,1) + frcv(jpr_oty1)%z3(ji,jj,1)
|
|
|
- frcv(jpr_taum)%z3(ji,jj,1) = 0.5 * SQRT( zzx * zzx + zzy * zzy )
|
|
|
- END DO
|
|
|
- END DO
|
|
|
- CALL lbc_lnk( frcv(jpr_taum)%z3(:,:,1), 'T', 1. )
|
|
|
- llnewtau = .TRUE.
|
|
|
- ELSE
|
|
|
- llnewtau = .FALSE.
|
|
|
- ENDIF
|
|
|
+ DO ji = fs_2, fs_jpim1 ! vect. opt.
|
|
|
+ zzx = frcv(jpr_otx1)%z3(ji-1,jj ,1) + frcv(jpr_otx1)%z3(ji,jj,1)
|
|
|
+ zzy = frcv(jpr_oty1)%z3(ji ,jj-1,1) + frcv(jpr_oty1)%z3(ji,jj,1)
|
|
|
+ frcv(jpr_taum)%z3(ji,jj,1) = 0.5 * SQRT( zzx * zzx + zzy * zzy )
|
|
|
+ END DO
|
|
|
+ END DO
|
|
|
+ CALL lbc_lnk( frcv(jpr_taum)%z3(:,:,1), 'T', 1. )
|
|
|
+ llnewtau = .TRUE.
|
|
|
ELSE
|
|
|
- llnewtau = nrcvinfo(jpr_taum) == OASIS_Rcv
|
|
|
- ! Stress module can be negative when received (interpolation problem)
|
|
|
- IF( llnewtau ) THEN
|
|
|
- frcv(jpr_taum)%z3(:,:,1) = MAX( 0._wp, frcv(jpr_taum)%z3(:,:,1) )
|
|
|
- ENDIF
|
|
|
+ IF( .NOT. srcv(jpr_taum)%laction ) THEN ! compute wind stress module from its components if not received
|
|
|
+ ! => need to be done only when otx1 was changed
|
|
|
+ IF( llnewtx ) THEN
|
|
|
+!CDIR NOVERRCHK
|
|
|
+ DO jj = 2, jpjm1
|
|
|
+!CDIR NOVERRCHK
|
|
|
+ DO ji = fs_2, fs_jpim1 ! vect. opt.
|
|
|
+ zzx = frcv(jpr_otx1)%z3(ji-1,jj ,1) + frcv(jpr_otx1)%z3(ji,jj,1)
|
|
|
+ zzy = frcv(jpr_oty1)%z3(ji ,jj-1,1) + frcv(jpr_oty1)%z3(ji,jj,1)
|
|
|
+ frcv(jpr_taum)%z3(ji,jj,1) = 0.5 * SQRT( zzx * zzx + zzy * zzy )
|
|
|
+ END DO
|
|
|
+ END DO
|
|
|
+ CALL lbc_lnk( frcv(jpr_taum)%z3(:,:,1), 'T', 1. )
|
|
|
+ llnewtau = .TRUE.
|
|
|
+ ELSE
|
|
|
+ llnewtau = .FALSE.
|
|
|
+ ENDIF
|
|
|
+ ELSE
|
|
|
+ llnewtau = nrcvinfo(jpr_taum) == OASIS_Rcv
|
|
|
+ ! Stress module can be negative when received (interpolation problem)
|
|
|
+ IF( llnewtau ) THEN
|
|
|
+ frcv(jpr_taum)%z3(:,:,1) = MAX( 0._wp, frcv(jpr_taum)%z3(:,:,1) )
|
|
|
+ ENDIF
|
|
|
+ ENDIF
|
|
|
ENDIF
|
|
|
!
|
|
|
! ! ========================= !
|
|
|
! ! 10 m wind speed ! (wndm)
|
|
|
! ! ========================= !
|
|
|
!
|
|
|
- IF( .NOT. srcv(jpr_w10m)%laction ) THEN ! compute wind spreed from wind stress module if not received
|
|
|
- ! => need to be done only when taumod was changed
|
|
|
- IF( llnewtau ) THEN
|
|
|
- zcoef = 1. / ( zrhoa * zcdrag )
|
|
|
+ IF( ln_force_windstress ) THEN
|
|
|
+ zcoef = 1. / ( zrhoa * zcdrag )
|
|
|
!CDIR NOVERRCHK
|
|
|
- DO jj = 1, jpj
|
|
|
+ DO jj = 1, jpj
|
|
|
!CDIR NOVERRCHK
|
|
|
- DO ji = 1, jpi
|
|
|
- frcv(jpr_w10m)%z3(ji,jj,1) = SQRT( frcv(jpr_taum)%z3(ji,jj,1) * zcoef )
|
|
|
- END DO
|
|
|
- END DO
|
|
|
- ENDIF
|
|
|
+ DO ji = 1, jpi
|
|
|
+ frcv(jpr_w10m)%z3(ji,jj,1) = SQRT( frcv(jpr_taum)%z3(ji,jj,1) * zcoef )
|
|
|
+ END DO
|
|
|
+ END DO
|
|
|
+ ELSE
|
|
|
+ IF( .NOT. srcv(jpr_w10m)%laction ) THEN ! compute wind spreed from wind stress module if not received
|
|
|
+ ! => need to be done only when taumod was changed
|
|
|
+ IF( llnewtau ) THEN
|
|
|
+ zcoef = 1. / ( zrhoa * zcdrag )
|
|
|
+!CDIR NOVERRCHK
|
|
|
+ DO jj = 1, jpj
|
|
|
+!CDIR NOVERRCHK
|
|
|
+ DO ji = 1, jpi
|
|
|
+ frcv(jpr_w10m)%z3(ji,jj,1) = SQRT( frcv(jpr_taum)%z3(ji,jj,1) * zcoef )
|
|
|
+ END DO
|
|
|
+ END DO
|
|
|
+ ENDIF
|
|
|
+ ENDIF
|
|
|
ENDIF
|
|
|
-
|
|
|
+ !
|
|
|
! u(v)tau and taum will be modified by ice model
|
|
|
! -> need to be reset before each call of the ice/fsbc
|
|
|
IF( MOD( kt-1, k_fsbc ) == 0 ) THEN
|
|
@@ -1283,6 +1319,14 @@ CONTAINS
|
|
|
frcv(jpr_itx1)%z3(:,:,1) = ztx(:,:) ! overwrite 1st component on the 1st grid
|
|
|
frcv(jpr_ity1)%z3(:,:,1) = zty(:,:) ! overwrite 2nd component on the 1st grid
|
|
|
ENDIF
|
|
|
+ !
|
|
|
+ IF( ln_force_windstress ) THEN
|
|
|
+
|
|
|
+ frcv(jpr_itx1)%z3(:,:,1) = frcv(jpr_itx1)%z3(:,:,1) + 1d0*sf_tau_anom(1)%fnow(:,:,1)
|
|
|
+ frcv(jpr_ity1)%z3(:,:,1) = frcv(jpr_ity1)%z3(:,:,1) + 1d0*sf_tau_anom(2)%fnow(:,:,1)
|
|
|
+
|
|
|
+ ENDIF
|
|
|
+ !
|
|
|
! ! ======================= !
|
|
|
ELSE ! use ocean stress !
|
|
|
! ! ======================= !
|
|
@@ -2222,4 +2266,4 @@ CONTAINS
|
|
|
END SUBROUTINE sbc_cpl_snd
|
|
|
|
|
|
!!======================================================================
|
|
|
-END MODULE sbccpl
|
|
|
+END MODULE sbccpl
|