Changeset 10970 for NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/FLO
- Timestamp:
- 2019-05-13T14:02:19+02:00 (5 years ago)
- 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 35 35 CONTAINS 36 36 37 SUBROUTINE flo_4rk( kt )37 SUBROUTINE flo_4rk( kt, Kbb, Kmm ) 38 38 !!---------------------------------------------------------------------- 39 39 !! *** ROUTINE flo_4rk *** … … 47 47 !! floats and the grid defined on the domain. 48 48 !!---------------------------------------------------------------------- 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 50 51 !! 51 52 INTEGER :: jfl, jind ! dummy loop indices … … 127 128 128 129 ! 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 ) 130 131 131 132 ! computation of Runge-Kutta factor … … 155 156 156 157 157 SUBROUTINE flo_interp( pxt , pyt , pzt , & 158 SUBROUTINE flo_interp( Kbb, Kmm, & 159 & pxt , pyt , pzt , & 158 160 & pufl, pvfl, pwfl, ki ) 159 161 !!---------------------------------------------------------------------- … … 167 169 !! integrated with RK method. 168 170 !!---------------------------------------------------------------------- 171 INTEGER , INTENT(in ) :: Kbb, Kmm ! ocean time level indices 169 172 REAL(wp) , DIMENSION(jpnfl), INTENT(in ) :: pxt , pyt , pzt ! position of the float 170 173 REAL(wp) , DIMENSION(jpnfl), INTENT( out) :: pufl, pvfl, pwfl ! velocity at this position … … 248 251 DO jind3 = 1, 4 249 252 ztufl(jfl,jind1,jind2,jind3) = & 250 & ( tcoef1(ki) * u b(iidu(jfl,jind1),ijdu(jfl,jind2),ikdu(jfl,jind3)) + &251 & tcoef2(ki) * u n(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) ) & 252 255 & / e1u(iidu(jfl,jind1),ijdu(jfl,jind2)) 253 256 END DO … … 332 335 DO jind3 = 1 ,4 333 336 ztvfl(jfl,jind1,jind2,jind3)= & 334 & ( tcoef1(ki) * v b(iidv(jfl,jind1),ijdv(jfl,jind2),ikdv(jfl,jind3)) + &335 & tcoef2(ki) * v n(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) ) & 336 339 & / e2v(iidv(jfl,jind1),ijdv(jfl,jind2)) 337 340 END DO … … 424 427 ztwfl(jfl,jind1,jind2,jind3)= & 425 428 & ( tcoef1(ki) * wb(iidw(jfl,jind1),ijdw(jfl,jind2),ikdw(jfl,jind3))+ & 426 & tcoef2(ki) * w n(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) 428 431 END DO 429 432 END DO -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/FLO/floats.F90
r10068 r10970 39 39 CONTAINS 40 40 41 SUBROUTINE flo_stp( kt )41 SUBROUTINE flo_stp( kt, Kbb, Kmm ) 42 42 !!---------------------------------------------------------------------- 43 43 !! *** ROUTINE flo_stp *** … … 50 50 !! if ln_flork4 =T 51 51 !!---------------------------------------------------------------------- 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 53 54 !!---------------------------------------------------------------------- 54 55 ! 55 56 IF( ln_timing ) CALL timing_start('flo_stp') 56 57 ! 57 IF( ln_flork4 ) THEN ; CALL flo_4rk( kt )! Trajectories using a 4th order Runge Kutta scheme58 ELSE ; CALL flo_blk( kt )! Trajectories using Blanke' algorithme58 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 59 60 ENDIF 60 61 ! 61 62 IF( lk_mpp ) CALL mppsync ! synchronization of all the processor 62 63 ! 63 CALL flo_wri( kt )! trajectories ouput64 CALL flo_wri( kt, Kmm ) ! trajectories ouput 64 65 ! 65 66 CALL flo_rst( kt ) ! trajectories restart 66 67 ! 67 wb(:,:,:) = w n(:,:,:) ! Save the old vertical velocity field68 wb(:,:,:) = ww(:,:,:) ! Save the old vertical velocity field 68 69 ! 69 70 IF( ln_timing ) CALL timing_stop('flo_stp') … … 72 73 73 74 74 SUBROUTINE flo_init 75 SUBROUTINE flo_init( Kmm ) 75 76 !!---------------------------------------------------------------- 76 77 !! *** ROUTINE flo_init *** … … 78 79 !! ** Purpose : Read the namelist of floats 79 80 !!---------------------------------------------------------------------- 81 INTEGER, INTENT(in) :: Kmm ! ocean time level index 82 ! 80 83 INTEGER :: jfl 81 84 INTEGER :: ios ! Local integer output status for namelist read … … 130 133 END DO 131 134 ! 132 CALL flo_dom 135 CALL flo_dom( Kmm ) ! compute/read initial position of floats 133 136 ! 134 wb(:,:,:) = w n(:,:,:) ! set wb for computation of floats trajectories at the first time step137 wb(:,:,:) = ww(:,:,:) ! set wb for computation of floats trajectories at the first time step 135 138 ! 136 139 END SUBROUTINE flo_init … … 141 144 !!---------------------------------------------------------------------- 142 145 CONTAINS 143 SUBROUTINE flo_stp( kt )! Empty routine146 SUBROUTINE flo_stp( kt, Kbb, Kmm ) ! Empty routine 144 147 IMPLICIT NONE 145 148 INTEGER, INTENT( in ) :: kt 149 INTEGER, INTENT( in ) :: Kbb, Kmm 146 150 WRITE(*,*) 'flo_stp: You should not have seen this print! error?', kt 147 151 END SUBROUTINE flo_stp 148 SUBROUTINE flo_init ! Empty routine152 SUBROUTINE flo_init( Kmm ) ! Empty routine 149 153 IMPLICIT NONE 154 INTEGER, INTENT( in ) :: Kmm 150 155 END SUBROUTINE flo_init 151 156 #endif -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/FLO/floblk.F90
r10425 r10970 29 29 CONTAINS 30 30 31 SUBROUTINE flo_blk( kt )31 SUBROUTINE flo_blk( kt, Kbb, Kmm ) 32 32 !!--------------------------------------------------------------------- 33 33 !! *** ROUTINE flo_blk *** … … 40 40 !! of the floats and the grid defined on the domain. 41 41 !!---------------------------------------------------------------------- 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 43 44 !! 44 45 INTEGER :: jfl ! dummy loop arguments … … 112 113 ! compute the transport across the mesh where the float is. 113 114 !!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) 118 119 119 120 ! for a isobar float zsurfz is put to zero. The vertical velocity will be zero too. 120 121 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) 122 123 123 124 ! 124 zuinfl =( u b(iiloc(jfl)-1,ijloc(jfl),-ikl(jfl)) + un(iiloc(jfl)-1,ijloc(jfl),-ikl(jfl)) )/2.*zsurfx(1)125 zuoutfl=( u b(iiloc(jfl) ,ijloc(jfl),-ikl(jfl)) + un(iiloc(jfl) ,ijloc(jfl),-ikl(jfl)) )/2.*zsurfx(2)126 zvinfl =( v b(iiloc(jfl),ijloc(jfl)-1,-ikl(jfl)) + vn(iiloc(jfl),ijloc(jfl)-1,-ikl(jfl)) )/2.*zsurfy(1)127 zvoutfl=( v b(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) 128 129 zwinfl =-(wb(iiloc(jfl),ijloc(jfl),-(ikl(jfl)-1)) & 129 & + w n(iiloc(jfl),ijloc(jfl),-(ikl(jfl)-1)) )/2. * zsurfz*nisobfl(jfl)130 & + ww(iiloc(jfl),ijloc(jfl),-(ikl(jfl)-1)) )/2. * zsurfz*nisobfl(jfl) 130 131 zwoutfl=-(wb(iiloc(jfl),ijloc(jfl),- ikl(jfl) ) & 131 & + w n(iiloc(jfl),ijloc(jfl),- ikl(jfl) ) )/2. * zsurfz*nisobfl(jfl)132 & + ww(iiloc(jfl),ijloc(jfl),- ikl(jfl) ) )/2. * zsurfz*nisobfl(jfl) 132 133 133 134 ! 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 44 44 CONTAINS 45 45 46 SUBROUTINE flo_dom 46 SUBROUTINE flo_dom( Kmm ) 47 47 !! --------------------------------------------------------------------- 48 48 !! *** ROUTINE flo_dom *** … … 53 53 !! the longitude (degree) and the depth (m). 54 54 !!---------------------------------------------------------------------- 55 INTEGER, INTENT(in) :: Kmm ! ocean time level index 56 ! 55 57 INTEGER :: jfl ! dummy loop 56 58 INTEGER :: inum ! logical unit for file read … … 94 96 CALL flo_add_new_ariane_floats(jpnrstflo+1,jpnfl) 95 97 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) 97 99 ENDIF 98 100 ENDIF … … 106 108 CALL flo_add_new_ariane_floats(1,jpnfl) 107 109 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) 109 111 ENDIF 110 112 … … 113 115 END SUBROUTINE flo_dom 114 116 115 SUBROUTINE flo_add_new_floats( kfl_start, kfl_end)117 SUBROUTINE flo_add_new_floats(Kmm, kfl_start, kfl_end) 116 118 !! ------------------------------------------------------------- 117 119 !! *** SUBROUTINE add_new_arianefloats *** … … 128 130 !! ** Method : 129 131 !!---------------------------------------------------------------------- 132 INTEGER, INTENT(in) :: Kmm 130 133 INTEGER, INTENT(in) :: kfl_start, kfl_end 131 134 !! … … 174 177 ihtest(jfl) = ihtest(jfl)+1 175 178 DO jk = 1, jpk-1 176 IF( (gdepw _n(ji,jj,jk) <= flzz(jfl)) .AND. (gdepw_n(ji,jj,jk+1) > flzz(jfl)) ) THEN179 IF( (gdepw(ji,jj,jk,Kmm) <= flzz(jfl)) .AND. (gdepw(ji,jj,jk+1,Kmm) > flzz(jfl)) ) THEN 177 180 ikmfl(jfl) = jk 178 181 ivtest(jfl) = ivtest(jfl) + 1 … … 236 239 zgifl(jfl)= (iimfl(jfl)-0.5) + zdxab/e1u(iimfl(jfl)-1,ijmfl(jfl)) + (mig(1)-1) 237 240 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) ) 244 247 ELSE 245 248 zgifl(jfl) = 0.e0 -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/FLO/flowri.F90
r10425 r10970 55 55 END FUNCTION flo_wri_alloc 56 56 57 SUBROUTINE flo_wri( kt )57 SUBROUTINE flo_wri( kt, Kmm ) 58 58 !!--------------------------------------------------------------------- 59 59 !! *** ROUTINE flo_wri *** … … 68 68 !!---------------------------------------------------------------------- 69 69 !! * Arguments 70 INTEGER :: kt ! time step 70 INTEGER, INTENT(in) :: kt ! time step 71 INTEGER, INTENT(in) :: Kmm ! time level index 71 72 72 73 !! * Local declarations … … 120 121 zlon(jfl) = (1.-zafl)*(1.-zbfl)*glamt(iafloc ,ibfloc ) + (1.-zafl) * zbfl * glamt(iafloc ,ib1floc) & 121 122 + 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) 123 124 124 125 !save temperature, salinity and density at this position 125 ztem(jfl) = ts n(iafloc,ibfloc,icfl,jp_tem)126 zsal (jfl) = ts n(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) 127 128 zrho (jfl) = (rhd(iafloc,ibfloc,icfl)+1)*rau0 128 129 … … 141 142 zlon(jfl) = (1.-zafl)*(1.-zbfl)*glamt(iafloc ,ibfloc ) + (1.-zafl) * zbfl * glamt(iafloc ,ib1floc) & 142 143 + 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) = ts n(iafloc,ibfloc,icfl,jp_tem)146 zsal(jfl) = ts n(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) 147 148 zrho(jfl) = (rhd(iafloc,ibfloc,icfl)+1)*rau0 148 149
Note: See TracChangeset
for help on using the changeset viewer.