New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 10970 for NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/FLO – NEMO

Ignore:
Timestamp:
2019-05-13T14:02:19+02:00 (5 years ago)
Author:
davestorkey
Message:

2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps : CRS and FLO. Only tested compilation. Note that base code doesn't compile with key_floats (#2279), so changes to FLO not really tested at all.

Location:
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/FLO
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/FLO/flo4rk.F90

    r10068 r10970  
    3535CONTAINS 
    3636 
    37    SUBROUTINE flo_4rk( kt ) 
     37   SUBROUTINE flo_4rk( kt, Kbb, Kmm ) 
    3838      !!---------------------------------------------------------------------- 
    3939      !!                  ***  ROUTINE flo_4rk  *** 
     
    4747      !!       floats and the grid defined on the domain. 
    4848      !!---------------------------------------------------------------------- 
    49       INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
     49      INTEGER, INTENT(in) ::   kt         ! ocean time-step index 
     50      INTEGER, INTENT(in) ::   Kbb, Kmm   ! ocean time level indices 
    5051      !! 
    5152      INTEGER ::  jfl, jind           ! dummy loop indices 
     
    127128       
    128129         ! for each step we compute the compute the velocity with Lagrange interpolation 
    129          CALL flo_interp( zgifl, zgjfl, zgkfl, zufl, zvfl, zwfl, jind ) 
     130         CALL flo_interp( Kbb, Kmm, zgifl, zgjfl, zgkfl, zufl, zvfl, zwfl, jind ) 
    130131          
    131132         ! computation of Runge-Kutta factor 
     
    155156 
    156157 
    157    SUBROUTINE flo_interp( pxt , pyt , pzt ,      & 
     158   SUBROUTINE flo_interp( Kbb, Kmm,              & 
     159      &                   pxt , pyt , pzt ,      & 
    158160      &                   pufl, pvfl, pwfl, ki ) 
    159161      !!---------------------------------------------------------------------- 
     
    167169      !!      integrated with RK method. 
    168170      !!---------------------------------------------------------------------- 
     171      INTEGER                    , INTENT(in   ) ::   Kbb, Kmm           ! ocean time level indices 
    169172      REAL(wp) , DIMENSION(jpnfl), INTENT(in   ) ::   pxt , pyt , pzt    ! position of the float 
    170173      REAL(wp) , DIMENSION(jpnfl), INTENT(  out) ::   pufl, pvfl, pwfl   ! velocity at this position 
     
    248251               DO jind3 = 1, 4 
    249252                  ztufl(jfl,jind1,jind2,jind3) =   & 
    250                      &   (  tcoef1(ki) * ub(iidu(jfl,jind1),ijdu(jfl,jind2),ikdu(jfl,jind3)) +   & 
    251                      &      tcoef2(ki) * un(iidu(jfl,jind1),ijdu(jfl,jind2),ikdu(jfl,jind3)) )   & 
     253                     &   (  tcoef1(ki) * uu(iidu(jfl,jind1),ijdu(jfl,jind2),ikdu(jfl,jind3),Kbb) +   & 
     254                     &      tcoef2(ki) * uu(iidu(jfl,jind1),ijdu(jfl,jind2),ikdu(jfl,jind3),Kmm) )   & 
    252255                     &      / e1u(iidu(jfl,jind1),ijdu(jfl,jind2))  
    253256               END DO 
     
    332335               DO jind3 = 1 ,4 
    333336                  ztvfl(jfl,jind1,jind2,jind3)=   & 
    334                      &   ( tcoef1(ki) * vb(iidv(jfl,jind1),ijdv(jfl,jind2),ikdv(jfl,jind3))  +   & 
    335                      &     tcoef2(ki) * vn(iidv(jfl,jind1),ijdv(jfl,jind2),ikdv(jfl,jind3)) )    &  
     337                     &   ( tcoef1(ki) * vv(iidv(jfl,jind1),ijdv(jfl,jind2),ikdv(jfl,jind3),Kbb)  +   & 
     338                     &     tcoef2(ki) * vv(iidv(jfl,jind1),ijdv(jfl,jind2),ikdv(jfl,jind3),Kmm) )    &  
    336339                     &     / e2v(iidv(jfl,jind1),ijdv(jfl,jind2)) 
    337340               END DO 
     
    424427                  ztwfl(jfl,jind1,jind2,jind3)=   & 
    425428                     &   ( tcoef1(ki) * wb(iidw(jfl,jind1),ijdw(jfl,jind2),ikdw(jfl,jind3))+   & 
    426                      &     tcoef2(ki) * wn(iidw(jfl,jind1),ijdw(jfl,jind2),ikdw(jfl,jind3)) )  & 
    427                      &   / e3w_n(iidw(jfl,jind1),ijdw(jfl,jind2),ikdw(jfl,jind3)) 
     429                     &     tcoef2(ki) * ww(iidw(jfl,jind1),ijdw(jfl,jind2),ikdw(jfl,jind3)) )  & 
     430                     &   / e3w(iidw(jfl,jind1),ijdw(jfl,jind2),ikdw(jfl,jind3),Kmm) 
    428431               END DO 
    429432            END DO 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/FLO/floats.F90

    r10068 r10970  
    3939CONTAINS 
    4040 
    41    SUBROUTINE flo_stp( kt ) 
     41   SUBROUTINE flo_stp( kt, Kbb, Kmm ) 
    4242      !!---------------------------------------------------------------------- 
    4343      !!                   ***  ROUTINE flo_stp  *** 
     
    5050      !!        if ln_flork4 =T 
    5151      !!---------------------------------------------------------------------- 
    52       INTEGER, INTENT( in  ) ::   kt   ! ocean time step 
     52      INTEGER, INTENT( in  ) ::   kt        ! ocean time step 
     53      INTEGER, INTENT( in  ) ::   Kbb, Kmm  ! ocean time level indices  
    5354      !!---------------------------------------------------------------------- 
    5455      ! 
    5556      IF( ln_timing )   CALL timing_start('flo_stp') 
    5657      ! 
    57       IF( ln_flork4 ) THEN   ;   CALL flo_4rk( kt )        ! Trajectories using a 4th order Runge Kutta scheme 
    58       ELSE                   ;   CALL flo_blk( kt )        ! Trajectories using Blanke' algorithme 
     58      IF( ln_flork4 ) THEN   ;   CALL flo_4rk( kt, Kbb, Kmm )  ! Trajectories using a 4th order Runge Kutta scheme 
     59      ELSE                   ;   CALL flo_blk( kt, Kbb, Kmm )  ! Trajectories using Blanke' algorithme 
    5960      ENDIF 
    6061      ! 
    6162      IF( lk_mpp )   CALL mppsync   ! synchronization of all the processor 
    6263      ! 
    63       CALL flo_wri( kt )      ! trajectories ouput  
     64      CALL flo_wri( kt, Kmm ) ! trajectories ouput  
    6465      ! 
    6566      CALL flo_rst( kt )      ! trajectories restart 
    6667      ! 
    67       wb(:,:,:) = wn(:,:,:)         ! Save the old vertical velocity field 
     68      wb(:,:,:) = ww(:,:,:)         ! Save the old vertical velocity field 
    6869      ! 
    6970      IF( ln_timing )   CALL timing_stop('flo_stp') 
     
    7273 
    7374 
    74    SUBROUTINE flo_init 
     75   SUBROUTINE flo_init( Kmm ) 
    7576      !!---------------------------------------------------------------- 
    7677      !!                 ***  ROUTINE flo_init  *** 
     
    7879      !! ** Purpose :   Read the namelist of floats 
    7980      !!---------------------------------------------------------------------- 
     81      INTEGER, INTENT(in) :: Kmm       ! ocean time level index 
     82      ! 
    8083      INTEGER ::   jfl 
    8184      INTEGER ::   ios                 ! Local integer output status for namelist read 
     
    130133      END DO 
    131134      ! 
    132       CALL flo_dom                  ! compute/read initial position of floats 
     135      CALL flo_dom( Kmm )           ! compute/read initial position of floats 
    133136      ! 
    134       wb(:,:,:) = wn(:,:,:)         ! set wb for computation of floats trajectories at the first time step 
     137      wb(:,:,:) = ww(:,:,:)         ! set wb for computation of floats trajectories at the first time step 
    135138      ! 
    136139   END SUBROUTINE flo_init 
     
    141144   !!---------------------------------------------------------------------- 
    142145CONTAINS 
    143    SUBROUTINE flo_stp( kt )          ! Empty routine 
     146   SUBROUTINE flo_stp( kt, Kbb, Kmm )  ! Empty routine 
    144147      IMPLICIT NONE 
    145148      INTEGER, INTENT( in ) :: kt 
     149      INTEGER, INTENT( in ) :: Kbb, Kmm 
    146150      WRITE(*,*) 'flo_stp: You should not have seen this print! error?', kt 
    147151   END SUBROUTINE flo_stp 
    148    SUBROUTINE flo_init          ! Empty routine 
     152   SUBROUTINE flo_init( Kmm )          ! Empty routine 
    149153      IMPLICIT NONE 
     154      INTEGER, INTENT( in ) :: Kmm 
    150155   END SUBROUTINE flo_init 
    151156#endif 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/FLO/floblk.F90

    r10425 r10970  
    2929CONTAINS 
    3030 
    31    SUBROUTINE flo_blk( kt ) 
     31   SUBROUTINE flo_blk( kt, Kbb, Kmm ) 
    3232      !!--------------------------------------------------------------------- 
    3333      !!                  ***  ROUTINE flo_blk  *** 
     
    4040      !!      of the floats and the grid defined on the domain. 
    4141      !!---------------------------------------------------------------------- 
    42       INTEGER, INTENT( in  ) ::   kt ! ocean time step 
     42      INTEGER, INTENT( in  ) ::   kt       ! ocean time step 
     43      INTEGER, INTENT( in  ) ::   Kbb, Kmm ! ocean time level indices 
    4344      !! 
    4445      INTEGER :: jfl              ! dummy loop arguments 
     
    112113            ! compute the transport across the mesh where the float is.             
    113114!!bug (gm) change e3t into e3. but never checked  
    114             zsurfx(1) = e2u(iiloc(jfl)-1,ijloc(jfl)  ) * e3u_n(iiloc(jfl)-1,ijloc(jfl)  ,-ikl(jfl)) 
    115             zsurfx(2) = e2u(iiloc(jfl)  ,ijloc(jfl)  ) * e3u_n(iiloc(jfl)  ,ijloc(jfl)  ,-ikl(jfl)) 
    116             zsurfy(1) = e1v(iiloc(jfl)  ,ijloc(jfl)-1) * e3v_n(iiloc(jfl)  ,ijloc(jfl)-1,-ikl(jfl)) 
    117             zsurfy(2) = e1v(iiloc(jfl)  ,ijloc(jfl)  ) * e3v_n(iiloc(jfl)  ,ijloc(jfl)  ,-ikl(jfl)) 
     115            zsurfx(1) = e2u(iiloc(jfl)-1,ijloc(jfl)  ) * e3u(iiloc(jfl)-1,ijloc(jfl)  ,-ikl(jfl),Kmm) 
     116            zsurfx(2) = e2u(iiloc(jfl)  ,ijloc(jfl)  ) * e3u(iiloc(jfl)  ,ijloc(jfl)  ,-ikl(jfl),Kmm) 
     117            zsurfy(1) = e1v(iiloc(jfl)  ,ijloc(jfl)-1) * e3v(iiloc(jfl)  ,ijloc(jfl)-1,-ikl(jfl),Kmm) 
     118            zsurfy(2) = e1v(iiloc(jfl)  ,ijloc(jfl)  ) * e3v(iiloc(jfl)  ,ijloc(jfl)  ,-ikl(jfl),Kmm) 
    118119 
    119120            ! for a isobar float zsurfz is put to zero. The vertical velocity will be zero too. 
    120121            zsurfz =          e1e2t(iiloc(jfl),ijloc(jfl)) 
    121             zvol   = zsurfz * e3t_n(iiloc(jfl),ijloc(jfl),-ikl(jfl)) 
     122            zvol   = zsurfz * e3t(iiloc(jfl),ijloc(jfl),-ikl(jfl),Kmm) 
    122123 
    123124            ! 
    124             zuinfl =( ub(iiloc(jfl)-1,ijloc(jfl),-ikl(jfl)) + un(iiloc(jfl)-1,ijloc(jfl),-ikl(jfl)) )/2.*zsurfx(1) 
    125             zuoutfl=( ub(iiloc(jfl)  ,ijloc(jfl),-ikl(jfl)) + un(iiloc(jfl)  ,ijloc(jfl),-ikl(jfl)) )/2.*zsurfx(2) 
    126             zvinfl =( vb(iiloc(jfl),ijloc(jfl)-1,-ikl(jfl)) + vn(iiloc(jfl),ijloc(jfl)-1,-ikl(jfl)) )/2.*zsurfy(1) 
    127             zvoutfl=( vb(iiloc(jfl),ijloc(jfl)  ,-ikl(jfl)) + vn(iiloc(jfl),ijloc(jfl)  ,-ikl(jfl)) )/2.*zsurfy(2) 
     125            zuinfl =( uu(iiloc(jfl)-1,ijloc(jfl),-ikl(jfl),Kbb) + uu(iiloc(jfl)-1,ijloc(jfl),-ikl(jfl),Kmm) )/2.*zsurfx(1) 
     126            zuoutfl=( uu(iiloc(jfl)  ,ijloc(jfl),-ikl(jfl),Kbb) + uu(iiloc(jfl)  ,ijloc(jfl),-ikl(jfl),Kmm) )/2.*zsurfx(2) 
     127            zvinfl =( vv(iiloc(jfl),ijloc(jfl)-1,-ikl(jfl),Kbb) + vv(iiloc(jfl),ijloc(jfl)-1,-ikl(jfl),Kmm) )/2.*zsurfy(1) 
     128            zvoutfl=( vv(iiloc(jfl),ijloc(jfl)  ,-ikl(jfl),Kbb) + vv(iiloc(jfl),ijloc(jfl)  ,-ikl(jfl),Kmm) )/2.*zsurfy(2) 
    128129            zwinfl =-(wb(iiloc(jfl),ijloc(jfl),-(ikl(jfl)-1))    & 
    129                &   +  wn(iiloc(jfl),ijloc(jfl),-(ikl(jfl)-1)) )/2. *  zsurfz*nisobfl(jfl) 
     130               &   +  ww(iiloc(jfl),ijloc(jfl),-(ikl(jfl)-1)) )/2. *  zsurfz*nisobfl(jfl) 
    130131            zwoutfl=-(wb(iiloc(jfl),ijloc(jfl),- ikl(jfl)   )   & 
    131                &   +  wn(iiloc(jfl),ijloc(jfl),- ikl(jfl)   ) )/2. *  zsurfz*nisobfl(jfl) 
     132               &   +  ww(iiloc(jfl),ijloc(jfl),- ikl(jfl)   ) )/2. *  zsurfz*nisobfl(jfl) 
    132133             
    133134            ! interpolation of velocity field on the float initial position             
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/FLO/flodom.F90

    r10425 r10970  
    4444CONTAINS 
    4545 
    46    SUBROUTINE flo_dom 
     46   SUBROUTINE flo_dom( Kmm ) 
    4747      !! --------------------------------------------------------------------- 
    4848      !!                  ***  ROUTINE flo_dom  *** 
     
    5353      !!               the longitude (degree) and the depth (m). 
    5454      !!----------------------------------------------------------------------       
     55      INTEGER, INTENT(in) ::  Kmm    ! ocean time level index 
     56      ! 
    5557      INTEGER            ::   jfl    ! dummy loop   
    5658      INTEGER            ::   inum   ! logical unit for file read 
     
    9496                CALL flo_add_new_ariane_floats(jpnrstflo+1,jpnfl)  
    9597            ELSE                 !Add new floats with long/lat convention 
    96                 CALL flo_add_new_floats(jpnrstflo+1,jpnfl) 
     98                CALL flo_add_new_floats(Kmm,jpnrstflo+1,jpnfl) 
    9799            ENDIF 
    98100         ENDIF 
     
    106108            CALL flo_add_new_ariane_floats(1,jpnfl) 
    107109         ELSE                      !Add new floats with long/lat convention 
    108             CALL flo_add_new_floats(1,jpnfl) 
     110            CALL flo_add_new_floats(Kmm,1,jpnfl) 
    109111         ENDIF 
    110112 
     
    113115   END SUBROUTINE flo_dom 
    114116 
    115    SUBROUTINE flo_add_new_floats(kfl_start, kfl_end) 
     117   SUBROUTINE flo_add_new_floats(Kmm, kfl_start, kfl_end) 
    116118      !! ------------------------------------------------------------- 
    117119      !!                 ***  SUBROUTINE add_new_arianefloats  *** 
     
    128130      !! ** Method  :  
    129131      !!---------------------------------------------------------------------- 
     132      INTEGER, INTENT(in) :: Kmm 
    130133      INTEGER, INTENT(in) :: kfl_start, kfl_end 
    131134      !! 
     
    174177                  ihtest(jfl) = ihtest(jfl)+1 
    175178                  DO jk = 1, jpk-1 
    176                      IF( (gdepw_n(ji,jj,jk) <= flzz(jfl)) .AND. (gdepw_n(ji,jj,jk+1) > flzz(jfl)) ) THEN 
     179                     IF( (gdepw(ji,jj,jk,Kmm) <= flzz(jfl)) .AND. (gdepw(ji,jj,jk+1,Kmm) > flzz(jfl)) ) THEN 
    177180                        ikmfl(jfl) = jk 
    178181                        ivtest(jfl) = ivtest(jfl) + 1 
     
    236239            zgifl(jfl)= (iimfl(jfl)-0.5) + zdxab/e1u(iimfl(jfl)-1,ijmfl(jfl)) + (mig(1)-1) 
    237240            zgjfl(jfl)= (ijmfl(jfl)-0.5) + zdyad/e2v(iimfl(jfl),ijmfl(jfl)-1) + (mjg(1)-1) 
    238             zgkfl(jfl) = (( gdepw_n(iimfl(jfl),ijmfl(jfl),ikmfl(jfl)+1) - flzz(jfl) )* ikmfl(jfl))   & 
    239                &                 / (  gdepw_n(iimfl(jfl),ijmfl(jfl),ikmfl(jfl)+1)                              & 
    240                &                    - gdepw_n(iimfl(jfl),ijmfl(jfl),ikmfl(jfl) ) )                             & 
    241                &                 + (( flzz(jfl)-gdepw_n(iimfl(jfl),ijmfl(jfl),ikmfl(jfl)) ) *(ikmfl(jfl)+1))   & 
    242                &                 / (  gdepw_n(iimfl(jfl),ijmfl(jfl),ikmfl(jfl)+1)                              & 
    243                &                    - gdepw_n(iimfl(jfl),ijmfl(jfl),ikmfl(jfl)) ) 
     241            zgkfl(jfl) = (( gdepw(iimfl(jfl),ijmfl(jfl),ikmfl(jfl)+1,Kmm) - flzz(jfl) )* ikmfl(jfl))   & 
     242               &                 / (  gdepw(iimfl(jfl),ijmfl(jfl),ikmfl(jfl)+1,Kmm)                              & 
     243               &                    - gdepw(iimfl(jfl),ijmfl(jfl),ikmfl(jfl) ,Kmm) )                             & 
     244               &                 + (( flzz(jfl)-gdepw(iimfl(jfl),ijmfl(jfl),ikmfl(jfl),Kmm) ) *(ikmfl(jfl)+1))   & 
     245               &                 / (  gdepw(iimfl(jfl),ijmfl(jfl),ikmfl(jfl)+1,Kmm)                              & 
     246               &                    - gdepw(iimfl(jfl),ijmfl(jfl),ikmfl(jfl),Kmm) ) 
    244247         ELSE 
    245248            zgifl(jfl) = 0.e0 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/FLO/flowri.F90

    r10425 r10970  
    5555   END FUNCTION flo_wri_alloc 
    5656 
    57    SUBROUTINE flo_wri( kt ) 
     57   SUBROUTINE flo_wri( kt, Kmm ) 
    5858      !!--------------------------------------------------------------------- 
    5959      !!                  ***  ROUTINE flo_wri *** 
     
    6868      !!---------------------------------------------------------------------- 
    6969      !! * Arguments 
    70       INTEGER  :: kt                               ! time step 
     70      INTEGER, INTENT(in)  :: kt                 ! time step 
     71      INTEGER, INTENT(in)  :: Kmm                ! time level index 
    7172 
    7273      !! * Local declarations 
     
    120121               zlon(jfl) = (1.-zafl)*(1.-zbfl)*glamt(iafloc ,ibfloc ) + (1.-zafl) * zbfl * glamt(iafloc ,ib1floc)   & 
    121122                     +     zafl *(1.-zbfl)*glamt(ia1floc,ibfloc ) +     zafl  * zbfl * glamt(ia1floc,ib1floc) 
    122                zdep(jfl) = (1.-zcfl)*gdepw_n(iafloc,ibfloc,icfl ) + zcfl * gdepw_n(iafloc,ibfloc,ic1fl)      
     123               zdep(jfl) = (1.-zcfl)*gdepw(iafloc,ibfloc,icfl ,Kmm) + zcfl * gdepw(iafloc,ibfloc,ic1fl,Kmm)      
    123124 
    124125               !save temperature, salinity and density at this position 
    125                ztem(jfl) = tsn(iafloc,ibfloc,icfl,jp_tem) 
    126                zsal (jfl) = tsn(iafloc,ibfloc,icfl,jp_sal) 
     126               ztem(jfl) = ts(iafloc,ibfloc,icfl,jp_tem,Kmm) 
     127               zsal (jfl) = ts(iafloc,ibfloc,icfl,jp_sal,Kmm) 
    127128               zrho (jfl) = (rhd(iafloc,ibfloc,icfl)+1)*rau0 
    128129 
     
    141142            zlon(jfl) = (1.-zafl)*(1.-zbfl)*glamt(iafloc ,ibfloc ) + (1.-zafl) * zbfl * glamt(iafloc ,ib1floc)   & 
    142143                      +     zafl *(1.-zbfl)*glamt(ia1floc,ibfloc ) +     zafl  * zbfl * glamt(ia1floc,ib1floc) 
    143             zdep(jfl) = (1.-zcfl)*gdepw_n(iafloc,ibfloc,icfl ) + zcfl * gdepw_n(iafloc,ibfloc,ic1fl) 
    144  
    145             ztem(jfl) = tsn(iafloc,ibfloc,icfl,jp_tem) 
    146             zsal(jfl) = tsn(iafloc,ibfloc,icfl,jp_sal) 
     144            zdep(jfl) = (1.-zcfl)*gdepw(iafloc,ibfloc,icfl ,Kmm) + zcfl * gdepw(iafloc,ibfloc,ic1fl,Kmm) 
     145 
     146            ztem(jfl) = ts(iafloc,ibfloc,icfl,jp_tem,Kmm) 
     147            zsal(jfl) = ts(iafloc,ibfloc,icfl,jp_sal,Kmm) 
    147148            zrho(jfl) = (rhd(iafloc,ibfloc,icfl)+1)*rau0 
    148149           
Note: See TracChangeset for help on using the changeset viewer.