Changeset 12377 for NEMO/trunk/src/OCE/FLO
- Timestamp:
- 2020-02-12T15:39:06+01:00 (4 years ago)
- Location:
- NEMO/trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk
- Property svn:externals
-
old new 3 3 ^/utils/build/mk@HEAD mk 4 4 ^/utils/tools@HEAD tools 5 ^/vendors/AGRIF/dev @HEAD ext/AGRIF5 ^/vendors/AGRIF/dev_r11615_ENHANCE-04_namelists_as_internalfiles_agrif@HEAD ext/AGRIF 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL
-
- Property svn:externals
-
NEMO/trunk/src/OCE/FLO/flo4rk.F90
r11536 r12377 33 33 CONTAINS 34 34 35 SUBROUTINE flo_4rk( kt )35 SUBROUTINE flo_4rk( kt, Kbb, Kmm ) 36 36 !!---------------------------------------------------------------------- 37 37 !! *** ROUTINE flo_4rk *** … … 45 45 !! floats and the grid defined on the domain. 46 46 !!---------------------------------------------------------------------- 47 INTEGER, INTENT(in) :: kt ! ocean time-step index 47 INTEGER, INTENT(in) :: kt ! ocean time-step index 48 INTEGER, INTENT(in) :: Kbb, Kmm ! ocean time level indices 48 49 !! 49 50 INTEGER :: jfl, jind ! dummy loop indices … … 125 126 126 127 ! for each step we compute the compute the velocity with Lagrange interpolation 127 CALL flo_interp( zgifl, zgjfl, zgkfl, zufl, zvfl, zwfl, jind )128 CALL flo_interp( Kbb, Kmm, zgifl, zgjfl, zgkfl, zufl, zvfl, zwfl, jind ) 128 129 129 130 ! computation of Runge-Kutta factor … … 153 154 154 155 155 SUBROUTINE flo_interp( pxt , pyt , pzt , & 156 SUBROUTINE flo_interp( Kbb, Kmm, & 157 & pxt , pyt , pzt , & 156 158 & pufl, pvfl, pwfl, ki ) 157 159 !!---------------------------------------------------------------------- … … 165 167 !! integrated with RK method. 166 168 !!---------------------------------------------------------------------- 169 INTEGER , INTENT(in ) :: Kbb, Kmm ! ocean time level indices 167 170 REAL(wp) , DIMENSION(jpnfl), INTENT(in ) :: pxt , pyt , pzt ! position of the float 168 171 REAL(wp) , DIMENSION(jpnfl), INTENT( out) :: pufl, pvfl, pwfl ! velocity at this position … … 246 249 DO jind3 = 1, 4 247 250 ztufl(jfl,jind1,jind2,jind3) = & 248 & ( tcoef1(ki) * u b(iidu(jfl,jind1),ijdu(jfl,jind2),ikdu(jfl,jind3)) + &249 & tcoef2(ki) * u n(iidu(jfl,jind1),ijdu(jfl,jind2),ikdu(jfl,jind3)) ) &251 & ( tcoef1(ki) * uu(iidu(jfl,jind1),ijdu(jfl,jind2),ikdu(jfl,jind3),Kbb) + & 252 & tcoef2(ki) * uu(iidu(jfl,jind1),ijdu(jfl,jind2),ikdu(jfl,jind3),Kmm) ) & 250 253 & / e1u(iidu(jfl,jind1),ijdu(jfl,jind2)) 251 254 END DO … … 330 333 DO jind3 = 1 ,4 331 334 ztvfl(jfl,jind1,jind2,jind3)= & 332 & ( tcoef1(ki) * v b(iidv(jfl,jind1),ijdv(jfl,jind2),ikdv(jfl,jind3)) + &333 & tcoef2(ki) * v n(iidv(jfl,jind1),ijdv(jfl,jind2),ikdv(jfl,jind3)) ) &335 & ( tcoef1(ki) * vv(iidv(jfl,jind1),ijdv(jfl,jind2),ikdv(jfl,jind3),Kbb) + & 336 & tcoef2(ki) * vv(iidv(jfl,jind1),ijdv(jfl,jind2),ikdv(jfl,jind3),Kmm) ) & 334 337 & / e2v(iidv(jfl,jind1),ijdv(jfl,jind2)) 335 338 END DO … … 422 425 ztwfl(jfl,jind1,jind2,jind3)= & 423 426 & ( tcoef1(ki) * wb(iidw(jfl,jind1),ijdw(jfl,jind2),ikdw(jfl,jind3))+ & 424 & tcoef2(ki) * w n(iidw(jfl,jind1),ijdw(jfl,jind2),ikdw(jfl,jind3)) ) &425 & / e3w _n(iidw(jfl,jind1),ijdw(jfl,jind2),ikdw(jfl,jind3))427 & tcoef2(ki) * ww(iidw(jfl,jind1),ijdw(jfl,jind2),ikdw(jfl,jind3)) ) & 428 & / e3w(iidw(jfl,jind1),ijdw(jfl,jind2),ikdw(jfl,jind3),Kmm) 426 429 END DO 427 430 END DO -
NEMO/trunk/src/OCE/FLO/floats.F90
r11536 r12377 37 37 CONTAINS 38 38 39 SUBROUTINE flo_stp( kt )39 SUBROUTINE flo_stp( kt, Kbb, Kmm ) 40 40 !!---------------------------------------------------------------------- 41 41 !! *** ROUTINE flo_stp *** … … 48 48 !! if ln_flork4 =T 49 49 !!---------------------------------------------------------------------- 50 INTEGER, INTENT( in ) :: kt ! ocean time step 50 INTEGER, INTENT( in ) :: kt ! ocean time step 51 INTEGER, INTENT( in ) :: Kbb, Kmm ! ocean time level indices 51 52 !!---------------------------------------------------------------------- 52 53 ! 53 54 IF( ln_timing ) CALL timing_start('flo_stp') 54 55 ! 55 IF( ln_flork4 ) THEN ; CALL flo_4rk( kt )! Trajectories using a 4th order Runge Kutta scheme56 ELSE ; CALL flo_blk( kt )! Trajectories using Blanke' algorithme56 IF( ln_flork4 ) THEN ; CALL flo_4rk( kt, Kbb, Kmm ) ! Trajectories using a 4th order Runge Kutta scheme 57 ELSE ; CALL flo_blk( kt, Kbb, Kmm ) ! Trajectories using Blanke' algorithme 57 58 ENDIF 58 59 ! 59 60 IF( lk_mpp ) CALL mppsync ! synchronization of all the processor 60 61 ! 61 CALL flo_wri( kt )! trajectories ouput62 CALL flo_wri( kt, Kmm ) ! trajectories ouput 62 63 ! 63 64 CALL flo_rst( kt ) ! trajectories restart 64 65 ! 65 wb(:,:,:) = w n(:,:,:) ! Save the old vertical velocity field66 wb(:,:,:) = ww(:,:,:) ! Save the old vertical velocity field 66 67 ! 67 68 IF( ln_timing ) CALL timing_stop('flo_stp') … … 70 71 71 72 72 SUBROUTINE flo_init 73 SUBROUTINE flo_init( Kmm ) 73 74 !!---------------------------------------------------------------- 74 75 !! *** ROUTINE flo_init *** … … 76 77 !! ** Purpose : Read the namelist of floats 77 78 !!---------------------------------------------------------------------- 79 INTEGER, INTENT(in) :: Kmm ! ocean time level index 80 ! 78 81 INTEGER :: jfl 79 82 INTEGER :: ios ! Local integer output status for namelist read … … 86 89 IF(lwp) WRITE(numout,*) '~~~~~~~' 87 90 88 REWIND( numnam_ref ) ! Namelist namflo in reference namelist : Floats89 91 READ ( numnam_ref, namflo, IOSTAT = ios, ERR = 901) 90 92 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namflo in reference namelist' ) 91 93 92 REWIND( numnam_cfg ) ! Namelist namflo in configuration namelist : Floats93 94 READ ( numnam_cfg, namflo, IOSTAT = ios, ERR = 902 ) 94 95 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namflo in configuration namelist' ) … … 130 131 END DO 131 132 ! 132 CALL flo_dom 133 CALL flo_dom( Kmm ) ! compute/read initial position of floats 133 134 ! 134 wb(:,:,:) = w n(:,:,:) ! set wb for computation of floats trajectories at the first time step135 wb(:,:,:) = ww(:,:,:) ! set wb for computation of floats trajectories at the first time step 135 136 ! 136 137 ENDIF 137 !138 138 END SUBROUTINE flo_init 139 139 -
NEMO/trunk/src/OCE/FLO/floblk.F90
r11536 r12377 27 27 CONTAINS 28 28 29 SUBROUTINE flo_blk( kt )29 SUBROUTINE flo_blk( kt, Kbb, Kmm ) 30 30 !!--------------------------------------------------------------------- 31 31 !! *** ROUTINE flo_blk *** … … 38 38 !! of the floats and the grid defined on the domain. 39 39 !!---------------------------------------------------------------------- 40 INTEGER, INTENT( in ) :: kt ! ocean time step 40 INTEGER, INTENT( in ) :: kt ! ocean time step 41 INTEGER, INTENT( in ) :: Kbb, Kmm ! ocean time level indices 41 42 !! 42 43 INTEGER :: jfl ! dummy loop arguments … … 110 111 ! compute the transport across the mesh where the float is. 111 112 !!bug (gm) change e3t into e3. but never checked 112 zsurfx(1) = e2u(iiloc(jfl)-1,ijloc(jfl) ) * e3u _n(iiloc(jfl)-1,ijloc(jfl) ,-ikl(jfl))113 zsurfx(2) = e2u(iiloc(jfl) ,ijloc(jfl) ) * e3u _n(iiloc(jfl) ,ijloc(jfl) ,-ikl(jfl))114 zsurfy(1) = e1v(iiloc(jfl) ,ijloc(jfl)-1) * e3v _n(iiloc(jfl) ,ijloc(jfl)-1,-ikl(jfl))115 zsurfy(2) = e1v(iiloc(jfl) ,ijloc(jfl) ) * e3v _n(iiloc(jfl) ,ijloc(jfl) ,-ikl(jfl))113 zsurfx(1) = e2u(iiloc(jfl)-1,ijloc(jfl) ) * e3u(iiloc(jfl)-1,ijloc(jfl) ,-ikl(jfl),Kmm) 114 zsurfx(2) = e2u(iiloc(jfl) ,ijloc(jfl) ) * e3u(iiloc(jfl) ,ijloc(jfl) ,-ikl(jfl),Kmm) 115 zsurfy(1) = e1v(iiloc(jfl) ,ijloc(jfl)-1) * e3v(iiloc(jfl) ,ijloc(jfl)-1,-ikl(jfl),Kmm) 116 zsurfy(2) = e1v(iiloc(jfl) ,ijloc(jfl) ) * e3v(iiloc(jfl) ,ijloc(jfl) ,-ikl(jfl),Kmm) 116 117 117 118 ! for a isobar float zsurfz is put to zero. The vertical velocity will be zero too. 118 119 zsurfz = e1e2t(iiloc(jfl),ijloc(jfl)) 119 zvol = zsurfz * e3t _n(iiloc(jfl),ijloc(jfl),-ikl(jfl))120 zvol = zsurfz * e3t(iiloc(jfl),ijloc(jfl),-ikl(jfl),Kmm) 120 121 121 122 ! 122 zuinfl =( u b(iiloc(jfl)-1,ijloc(jfl),-ikl(jfl)) + un(iiloc(jfl)-1,ijloc(jfl),-ikl(jfl)) )/2.*zsurfx(1)123 zuoutfl=( u b(iiloc(jfl) ,ijloc(jfl),-ikl(jfl)) + un(iiloc(jfl) ,ijloc(jfl),-ikl(jfl)) )/2.*zsurfx(2)124 zvinfl =( v b(iiloc(jfl),ijloc(jfl)-1,-ikl(jfl)) + vn(iiloc(jfl),ijloc(jfl)-1,-ikl(jfl)) )/2.*zsurfy(1)125 zvoutfl=( v b(iiloc(jfl),ijloc(jfl) ,-ikl(jfl)) + vn(iiloc(jfl),ijloc(jfl) ,-ikl(jfl)) )/2.*zsurfy(2)123 zuinfl =( uu(iiloc(jfl)-1,ijloc(jfl),-ikl(jfl),Kbb) + uu(iiloc(jfl)-1,ijloc(jfl),-ikl(jfl),Kmm) )/2.*zsurfx(1) 124 zuoutfl=( uu(iiloc(jfl) ,ijloc(jfl),-ikl(jfl),Kbb) + uu(iiloc(jfl) ,ijloc(jfl),-ikl(jfl),Kmm) )/2.*zsurfx(2) 125 zvinfl =( vv(iiloc(jfl),ijloc(jfl)-1,-ikl(jfl),Kbb) + vv(iiloc(jfl),ijloc(jfl)-1,-ikl(jfl),Kmm) )/2.*zsurfy(1) 126 zvoutfl=( vv(iiloc(jfl),ijloc(jfl) ,-ikl(jfl),Kbb) + vv(iiloc(jfl),ijloc(jfl) ,-ikl(jfl),Kmm) )/2.*zsurfy(2) 126 127 zwinfl =-(wb(iiloc(jfl),ijloc(jfl),-(ikl(jfl)-1)) & 127 & + w n(iiloc(jfl),ijloc(jfl),-(ikl(jfl)-1)) )/2. * zsurfz*nisobfl(jfl)128 & + ww(iiloc(jfl),ijloc(jfl),-(ikl(jfl)-1)) )/2. * zsurfz*nisobfl(jfl) 128 129 zwoutfl=-(wb(iiloc(jfl),ijloc(jfl),- ikl(jfl) ) & 129 & + w n(iiloc(jfl),ijloc(jfl),- ikl(jfl) ) )/2. * zsurfz*nisobfl(jfl)130 & + ww(iiloc(jfl),ijloc(jfl),- ikl(jfl) ) )/2. * zsurfz*nisobfl(jfl) 130 131 131 132 ! interpolation of velocity field on the float initial position -
NEMO/trunk/src/OCE/FLO/flodom.F90
r11818 r12377 40 40 CONTAINS 41 41 42 SUBROUTINE flo_dom 42 SUBROUTINE flo_dom( Kmm ) 43 43 !! --------------------------------------------------------------------- 44 44 !! *** ROUTINE flo_dom *** … … 49 49 !! the longitude (degree) and the depth (m). 50 50 !!---------------------------------------------------------------------- 51 INTEGER, INTENT(in) :: Kmm ! ocean time level index 52 ! 51 53 INTEGER :: jfl ! dummy loop 52 54 INTEGER :: inum ! logical unit for file read … … 90 92 CALL flo_add_new_ariane_floats(jpnrstflo+1,jpnfl) 91 93 ELSE !Add new floats with long/lat convention 92 CALL flo_add_new_floats( jpnrstflo+1,jpnfl)94 CALL flo_add_new_floats(Kmm,jpnrstflo+1,jpnfl) 93 95 ENDIF 94 96 ENDIF … … 102 104 CALL flo_add_new_ariane_floats(1,jpnfl) 103 105 ELSE !Add new floats with long/lat convention 104 CALL flo_add_new_floats( 1,jpnfl)106 CALL flo_add_new_floats(Kmm,1,jpnfl) 105 107 ENDIF 106 108 … … 109 111 END SUBROUTINE flo_dom 110 112 111 SUBROUTINE flo_add_new_floats( kfl_start, kfl_end)113 SUBROUTINE flo_add_new_floats(Kmm, kfl_start, kfl_end) 112 114 !! ------------------------------------------------------------- 113 115 !! *** SUBROUTINE add_new_arianefloats *** … … 124 126 !! ** Method : 125 127 !!---------------------------------------------------------------------- 128 INTEGER, INTENT(in) :: Kmm 126 129 INTEGER, INTENT(in) :: kfl_start, kfl_end 127 130 !! … … 170 173 ihtest(jfl) = ihtest(jfl)+1 171 174 DO jk = 1, jpk-1 172 IF( (gdepw _n(ji,jj,jk) <= flzz(jfl)) .AND. (gdepw_n(ji,jj,jk+1) > flzz(jfl)) ) THEN175 IF( (gdepw(ji,jj,jk,Kmm) <= flzz(jfl)) .AND. (gdepw(ji,jj,jk+1,Kmm) > flzz(jfl)) ) THEN 173 176 ikmfl(jfl) = jk 174 177 ivtest(jfl) = ivtest(jfl) + 1 … … 232 235 zgifl(jfl)= (iimfl(jfl)-0.5) + zdxab/e1u(iimfl(jfl)-1,ijmfl(jfl)) + (mig(1)-1) 233 236 zgjfl(jfl)= (ijmfl(jfl)-0.5) + zdyad/e2v(iimfl(jfl),ijmfl(jfl)-1) + (mjg(1)-1) 234 zgkfl(jfl) = (( gdepw _n(iimfl(jfl),ijmfl(jfl),ikmfl(jfl)+1) - flzz(jfl) )* ikmfl(jfl)) &235 & / ( gdepw _n(iimfl(jfl),ijmfl(jfl),ikmfl(jfl)+1) &236 & - gdepw _n(iimfl(jfl),ijmfl(jfl),ikmfl(jfl)) ) &237 & + (( flzz(jfl)-gdepw _n(iimfl(jfl),ijmfl(jfl),ikmfl(jfl)) ) *(ikmfl(jfl)+1)) &238 & / ( gdepw _n(iimfl(jfl),ijmfl(jfl),ikmfl(jfl)+1) &239 & - gdepw _n(iimfl(jfl),ijmfl(jfl),ikmfl(jfl)) )237 zgkfl(jfl) = (( gdepw(iimfl(jfl),ijmfl(jfl),ikmfl(jfl)+1,Kmm) - flzz(jfl) )* ikmfl(jfl)) & 238 & / ( gdepw(iimfl(jfl),ijmfl(jfl),ikmfl(jfl)+1,Kmm) & 239 & - gdepw(iimfl(jfl),ijmfl(jfl),ikmfl(jfl) ,Kmm) ) & 240 & + (( flzz(jfl)-gdepw(iimfl(jfl),ijmfl(jfl),ikmfl(jfl),Kmm) ) *(ikmfl(jfl)+1)) & 241 & / ( gdepw(iimfl(jfl),ijmfl(jfl),ikmfl(jfl)+1,Kmm) & 242 & - gdepw(iimfl(jfl),ijmfl(jfl),ikmfl(jfl),Kmm) ) 240 243 ELSE 241 244 zgifl(jfl) = 0.e0 -
NEMO/trunk/src/OCE/FLO/flowri.F90
r11818 r12377 51 51 END FUNCTION flo_wri_alloc 52 52 53 SUBROUTINE flo_wri( kt )53 SUBROUTINE flo_wri( kt, Kmm ) 54 54 !!--------------------------------------------------------------------- 55 55 !! *** ROUTINE flo_wri *** … … 64 64 !!---------------------------------------------------------------------- 65 65 !! * Arguments 66 INTEGER :: kt ! time step 66 INTEGER, INTENT(in) :: kt ! time step 67 INTEGER, INTENT(in) :: Kmm ! time level index 67 68 68 69 !! * Local declarations … … 116 117 zlon(jfl) = (1.-zafl)*(1.-zbfl)*glamt(iafloc ,ibfloc ) + (1.-zafl) * zbfl * glamt(iafloc ,ib1floc) & 117 118 + zafl *(1.-zbfl)*glamt(ia1floc,ibfloc ) + zafl * zbfl * glamt(ia1floc,ib1floc) 118 zdep(jfl) = (1.-zcfl)*gdepw _n(iafloc,ibfloc,icfl ) + zcfl * gdepw_n(iafloc,ibfloc,ic1fl)119 zdep(jfl) = (1.-zcfl)*gdepw(iafloc,ibfloc,icfl ,Kmm) + zcfl * gdepw(iafloc,ibfloc,ic1fl,Kmm) 119 120 120 121 !save temperature, salinity and density at this position 121 ztem(jfl) = ts n(iafloc,ibfloc,icfl,jp_tem)122 zsal (jfl) = ts n(iafloc,ibfloc,icfl,jp_sal)122 ztem(jfl) = ts(iafloc,ibfloc,icfl,jp_tem,Kmm) 123 zsal (jfl) = ts(iafloc,ibfloc,icfl,jp_sal,Kmm) 123 124 zrho (jfl) = (rhd(iafloc,ibfloc,icfl)+1)*rau0 124 125 … … 137 138 zlon(jfl) = (1.-zafl)*(1.-zbfl)*glamt(iafloc ,ibfloc ) + (1.-zafl) * zbfl * glamt(iafloc ,ib1floc) & 138 139 + zafl *(1.-zbfl)*glamt(ia1floc,ibfloc ) + zafl * zbfl * glamt(ia1floc,ib1floc) 139 zdep(jfl) = (1.-zcfl)*gdepw _n(iafloc,ibfloc,icfl ) + zcfl * gdepw_n(iafloc,ibfloc,ic1fl)140 141 ztem(jfl) = ts n(iafloc,ibfloc,icfl,jp_tem)142 zsal(jfl) = ts n(iafloc,ibfloc,icfl,jp_sal)140 zdep(jfl) = (1.-zcfl)*gdepw(iafloc,ibfloc,icfl ,Kmm) + zcfl * gdepw(iafloc,ibfloc,ic1fl,Kmm) 141 142 ztem(jfl) = ts(iafloc,ibfloc,icfl,jp_tem,Kmm) 143 zsal(jfl) = ts(iafloc,ibfloc,icfl,jp_sal,Kmm) 143 144 zrho(jfl) = (rhd(iafloc,ibfloc,icfl)+1)*rau0 144 145
Note: See TracChangeset
for help on using the changeset viewer.