Ignore:
Timestamp:
2019-06-13T18:20:13+02:00 (18 months ago)
Author:
dancopsey
Message:

Merged in changes from dev_merge_2017_GC_couple_pkg branch except for zotx1 and zoty1 changes in sbccpl.F90.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/UKMO/NEMO_4.0_GC_couple_pkg/src/OCE/SBC/sbccpl.F90

    r10888 r11105  
    219219      ALLOCATE( a_i(jpi,jpj,1) , STAT=ierr(2) )  ! used in sbcice_if.F90 (done here as there is no sbc_ice_if_init) 
    220220#endif 
    221       ALLOCATE( xcplmask(jpi,jpj,0:nn_cplmodel) , STAT=ierr(3) ) 
     221      !ALLOCATE( xcplmask(jpi,jpj,0:nn_cplmodel) , STAT=ierr(3) ) 
     222      ! Hardwire only two models as nn_cplmodel has not been read in 
     223      ! from the namelist yet. 
     224      ALLOCATE( xcplmask(jpi,jpj,0:2) , STAT=ierr(3) )    
    222225      ! 
    223226      IF( .NOT. ln_apr_dyn ) ALLOCATE( ssh_ib(jpi,jpj), ssh_ibb(jpi,jpj), apr(jpi, jpj), STAT=ierr(4) )  
     
    333336 
    334337      !                                   ! allocate sbccpl arrays 
    335       IF( sbc_cpl_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'sbc_cpl_alloc : unable to allocate arrays' ) 
     338      !IF( sbc_cpl_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'sbc_cpl_alloc : unable to allocate arrays' ) 
    336339      
    337340      ! ================================ ! 
     
    397400         srcv(jpr_otx2:jpr_otz2)%clgrid  = 'V'        !           and           V-point 
    398401         srcv(jpr_itx1:jpr_itz1)%clgrid  = 'F'        ! ice components given at F-point 
    399          srcv(jpr_otx1:jpr_otz2)%laction = .TRUE.     ! receive oce components on grid 1 & 2 
     402         !srcv(jpr_otx1:jpr_otz2)%laction = .TRUE.     ! receive oce components on grid 1 & 2 
     403! Currently needed for HadGEM3 - but shouldn't affect anyone else for the moment 
     404         srcv(jpr_otx1)%laction = .TRUE.  
     405         srcv(jpr_oty1)%laction = .TRUE. 
     406! 
    400407         srcv(jpr_itx1:jpr_itz1)%laction = .TRUE.     ! receive ice components on grid 1 only 
    401408      CASE( 'T,I' )  
     
    11021109      LOGICAL  ::   llnewtx, llnewtau      ! update wind stress components and module?? 
    11031110      INTEGER  ::   ji, jj, jn             ! dummy loop indices 
    1104       INTEGER  ::   isec                   ! number of seconds since nit000 (assuming rdt did not change since nit000) 
     1111      INTEGER  ::   isec                   ! number of seconds since nit000 (assuming rdttra did not change since nit000) 
     1112      INTEGER  ::   ikchoix 
    11051113      REAL(wp) ::   zcumulneg, zcumulpos   ! temporary scalars      
    11061114      REAL(wp) ::   zcoef                  ! temporary scalar 
     
    11081116      REAL(wp) ::   zcdrag = 1.5e-3        ! drag coefficient 
    11091117      REAL(wp) ::   zzx, zzy               ! temporary variables 
    1110       REAL(wp), DIMENSION(jpi,jpj) ::   ztx, zty, zmsk, zemp, zqns, zqsr 
     1118      REAL(wp), DIMENSION(jpi,jpj) ::   ztx, zty, zmsk, zemp, zqns, zqsr, ztx2, zty2 
    11111119      !!---------------------------------------------------------------------- 
    11121120      ! 
     
    11471155            IF( TRIM( sn_rcv_tau%clvor ) == 'eastward-northward' ) THEN   ! 2 components oriented along the local grid 
    11481156               !                                                       ! (geographical to local grid -> rotate the components) 
    1149                CALL rot_rep( frcv(jpr_otx1)%z3(:,:,1), frcv(jpr_oty1)%z3(:,:,1), srcv(jpr_otx1)%clgrid, 'en->i', ztx )    
    1150                IF( srcv(jpr_otx2)%laction ) THEN 
    1151                   CALL rot_rep( frcv(jpr_otx2)%z3(:,:,1), frcv(jpr_oty2)%z3(:,:,1), srcv(jpr_otx2)%clgrid, 'en->j', zty )    
    1152                ELSE 
    1153                   CALL rot_rep( frcv(jpr_otx1)%z3(:,:,1), frcv(jpr_oty1)%z3(:,:,1), srcv(jpr_otx1)%clgrid, 'en->j', zty )   
     1157               IF( srcv(jpr_otx1)%clgrid == 'U' .AND. (.NOT. srcv(jpr_otx2)%laction) ) THEN 
     1158                  ! Temporary code for HadGEM3 - will be removed eventually. 
     1159        ! Only applies when we have only taux on U grid and tauy on V grid 
     1160             DO jj=2,jpjm1 
     1161                DO ji=2,jpim1 
     1162                     ztx(ji,jj)=0.25*vmask(ji,jj,1)                & 
     1163                        *(frcv(jpr_otx1)%z3(ji,jj,1)+frcv(jpr_otx1)%z3(ji-1,jj,1)    & 
     1164                        +frcv(jpr_otx1)%z3(ji,jj+1,1)+frcv(jpr_otx1)%z3(ji-1,jj+1,1)) 
     1165                     zty(ji,jj)=0.25*umask(ji,jj,1)                & 
     1166                        *(frcv(jpr_oty1)%z3(ji,jj,1)+frcv(jpr_oty1)%z3(ji+1,jj,1)    & 
     1167                        +frcv(jpr_oty1)%z3(ji,jj-1,1)+frcv(jpr_oty1)%z3(ji+1,jj-1,1)) 
     1168                ENDDO 
     1169             ENDDO 
     1170                    
     1171             ikchoix = 1 
     1172             CALL repcmo (frcv(jpr_otx1)%z3(:,:,1),zty,ztx,frcv(jpr_oty1)%z3(:,:,1),ztx2,zty2,ikchoix) 
     1173             CALL lbc_lnk (ztx2,'U', -1. ) 
     1174             CALL lbc_lnk (zty2,'V', -1. ) 
     1175             frcv(jpr_otx1)%z3(:,:,1)=ztx2(:,:) 
     1176             frcv(jpr_oty1)%z3(:,:,1)=zty2(:,:) 
     1177          ELSE 
     1178             CALL rot_rep( frcv(jpr_otx1)%z3(:,:,1), frcv(jpr_oty1)%z3(:,:,1), srcv(jpr_otx1)%clgrid, 'en->i', ztx )    
     1179             frcv(jpr_otx1)%z3(:,:,1) = ztx(:,:)      ! overwrite 1st component on the 1st grid 
     1180             IF( srcv(jpr_otx2)%laction ) THEN 
     1181                CALL rot_rep( frcv(jpr_otx2)%z3(:,:,1), frcv(jpr_oty2)%z3(:,:,1), srcv(jpr_otx2)%clgrid, 'en->j', zty )    
     1182             ELSE 
     1183                CALL rot_rep( frcv(jpr_otx1)%z3(:,:,1), frcv(jpr_oty1)%z3(:,:,1), srcv(jpr_otx1)%clgrid, 'en->j', zty )  
     1184             ENDIF 
     1185          frcv(jpr_oty1)%z3(:,:,1) = zty(:,:)      ! overwrite 2nd component on the 2nd grid   
    11541186               ENDIF 
    1155                frcv(jpr_otx1)%z3(:,:,1) = ztx(:,:)      ! overwrite 1st component on the 1st grid 
    1156                frcv(jpr_oty1)%z3(:,:,1) = zty(:,:)      ! overwrite 2nd component on the 2nd grid 
    11571187            ENDIF 
    11581188            !                               
     
    20482078      ! 
    20492079      INTEGER ::   ji, jj, jl   ! dummy loop indices 
     2080      INTEGER ::   ikchoix 
    20502081      INTEGER ::   isec, info   ! local integer 
    20512082      REAL(wp) ::   zumax, zvmax 
     
    23092340         !                                                  j+1   j     -----V---F 
    23102341         ! surface velocity always sent from T point                     !       | 
    2311          !                                                        j      |   T   U 
     2342         ! [except for HadGEM3]                                   j      |   T   U 
    23122343         !                                                               |       | 
    23132344         !                                                   j    j-1   -I-------| 
     
    23212352            SELECT CASE( TRIM( sn_snd_crt%cldes ) ) 
    23222353            CASE( 'oce only'             )      ! C-grid ==> T 
    2323                DO jj = 2, jpjm1 
    2324                   DO ji = fs_2, fs_jpim1   ! vector opt. 
    2325                      zotx1(ji,jj) = 0.5 * ( un(ji,jj,1) + un(ji-1,jj  ,1) ) 
    2326                      zoty1(ji,jj) = 0.5 * ( vn(ji,jj,1) + vn(ji  ,jj-1,1) )  
     2354               IF ( TRIM( sn_snd_crt%clvgrd ) == 'T' ) THEN 
     2355                  DO jj = 2, jpjm1 
     2356                     DO ji = fs_2, fs_jpim1   ! vector opt. 
     2357                        zotx1(ji,jj) = 0.5 * ( un(ji,jj,1) + un(ji-1,jj  ,1) ) 
     2358                        zoty1(ji,jj) = 0.5 * ( vn(ji,jj,1) + vn(ji  ,jj-1,1) )  
     2359                     END DO 
    23272360                  END DO 
    2328                END DO 
     2361               ELSE 
     2362! Temporarily Changed for UKV 
     2363                  DO jj = 2, jpjm1 
     2364                     DO ji = 2, jpim1 
     2365                        zotx1(ji,jj) = un(ji,jj,1) 
     2366                        zoty1(ji,jj) = vn(ji,jj,1) 
     2367                     END DO 
     2368                  END DO 
     2369               ENDIF 
    23292370            CASE( 'weighted oce and ice' )      ! Ocean and Ice on C-grid ==> T   
    23302371               DO jj = 2, jpjm1 
     
    23542395         IF( TRIM( sn_snd_crt%clvor ) == 'eastward-northward' ) THEN             ! Rotation of the components 
    23552396            !                                                                     ! Ocean component 
    2356             CALL rot_rep( zotx1, zoty1, ssnd(jps_ocx1)%clgrid, 'ij->e', ztmp1 )       ! 1st component  
    2357             CALL rot_rep( zotx1, zoty1, ssnd(jps_ocx1)%clgrid, 'ij->n', ztmp2 )       ! 2nd component  
    2358             zotx1(:,:) = ztmp1(:,:)                                                   ! overwrite the components  
    2359             zoty1(:,:) = ztmp2(:,:) 
    2360             IF( ssnd(jps_ivx1)%laction ) THEN                                     ! Ice component 
    2361                CALL rot_rep( zitx1, zity1, ssnd(jps_ivx1)%clgrid, 'ij->e', ztmp1 )    ! 1st component  
    2362                CALL rot_rep( zitx1, zity1, ssnd(jps_ivx1)%clgrid, 'ij->n', ztmp2 )    ! 2nd component  
    2363                zitx1(:,:) = ztmp1(:,:)                                                ! overwrite the components  
    2364                zity1(:,:) = ztmp2(:,:) 
    2365             ENDIF 
     2397            IF ( TRIM( sn_snd_crt%clvgrd ) == 'T' ) THEN 
     2398               CALL rot_rep( zotx1, zoty1, ssnd(jps_ocx1)%clgrid, 'ij->e', ztmp1 )       ! 1st component 
     2399               CALL rot_rep( zotx1, zoty1, ssnd(jps_ocx1)%clgrid, 'ij->n', ztmp2 )       ! 2nd component 
     2400               zotx1(:,:) = ztmp1(:,:)                                                   ! overwrite the components 
     2401               zoty1(:,:) = ztmp2(:,:) 
     2402               IF( ssnd(jps_ivx1)%laction ) THEN                                  ! Ice component 
     2403                  CALL rot_rep( zitx1, zity1, ssnd(jps_ivx1)%clgrid, 'ij->e', ztmp1 )    ! 1st component 
     2404                  CALL rot_rep( zitx1, zity1, ssnd(jps_ivx1)%clgrid, 'ij->n', ztmp2 )    ! 2nd component 
     2405                  zitx1(:,:) = ztmp1(:,:)                                                ! overwrite the components 
     2406                  zity1(:,:) = ztmp2(:,:) 
     2407               ENDIF 
     2408            ELSE 
     2409               ! Temporary code for HadGEM3 - will be removed eventually. 
     2410               ! Only applies when we want uvel on U grid and vvel on V grid 
     2411               ! Rotate U and V onto geographic grid before sending. 
     2412 
     2413               DO jj=2,jpjm1 
     2414                  DO ji=2,jpim1 
     2415                     ztmp1(ji,jj)=0.25*vmask(ji,jj,1)                  & 
     2416                          *(zotx1(ji,jj)+zotx1(ji-1,jj)    & 
     2417                          +zotx1(ji,jj+1)+zotx1(ji-1,jj+1)) 
     2418                     ztmp2(ji,jj)=0.25*umask(ji,jj,1)                  & 
     2419                          *(zoty1(ji,jj)+zoty1(ji+1,jj)    & 
     2420                          +zoty1(ji,jj-1)+zoty1(ji+1,jj-1)) 
     2421                  ENDDO 
     2422               ENDDO 
     2423                
     2424               ! Ensure any N fold and wrap columns are updated 
     2425               CALL lbc_lnk(ztmp1, 'V', -1.0) 
     2426               CALL lbc_lnk(ztmp2, 'U', -1.0) 
     2427                
     2428               ikchoix = -1 
     2429               CALL repcmo (zotx1,ztmp2,ztmp1,zoty1,zotx1,zoty1,ikchoix) 
     2430           ENDIF 
    23662431         ENDIF 
    23672432         ! 
Note: See TracChangeset for help on using the changeset viewer.