Browse Source

Adding wind stress anomalies feature on seaice as well

Pierre-Yves Barriat 4 months ago
parent
commit
6268fbd521
1 changed files with 83 additions and 39 deletions
  1. 83 39
      sources/nemo-3.6/CONFIG/ORCA1L75_LIM3/MY_SRC/sbccpl.F90

+ 83 - 39
sources/nemo-3.6/CONFIG/ORCA1L75_LIM3/MY_SRC/sbccpl.F90

@@ -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