- Timestamp:
- 2020-09-14T17:40:34+02:00 (4 years ago)
- Location:
- NEMO/branches/2019/dev_r11351_fldread_with_XIOS
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11351_fldread_with_XIOS
- Property svn:externals
-
old new 3 3 ^/utils/build/mk@HEAD mk 4 4 ^/utils/tools@HEAD tools 5 ^/vendors/AGRIF/dev @HEADext/AGRIF5 ^/vendors/AGRIF/dev_r12970_AGRIF_CMEMS ext/AGRIF 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL 8 9 # SETTE 10 ^/utils/CI/sette@13382 sette
-
- Property svn:externals
-
NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/OCE/FLO/flo4rk.F90
r10068 r13463 4 4 !! Ocean floats : trajectory computation using a 4th order Runge-Kutta 5 5 !!====================================================================== 6 #if defined key_floats 7 !!---------------------------------------------------------------------- 8 !! 'key_floats' float trajectories 6 !! 9 7 !!---------------------------------------------------------------------- 10 8 !! flo_4rk : Compute the geographical position of floats … … 28 26 REAL(wp), DIMENSION (3) :: scoef1 = (/ 0.5 , 0.5 , 1.0 /) ! 29 27 28 # include "domzgr_substitute.h90" 30 29 !!---------------------------------------------------------------------- 31 30 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 35 34 CONTAINS 36 35 37 SUBROUTINE flo_4rk( kt )36 SUBROUTINE flo_4rk( kt, Kbb, Kmm ) 38 37 !!---------------------------------------------------------------------- 39 38 !! *** ROUTINE flo_4rk *** … … 47 46 !! floats and the grid defined on the domain. 48 47 !!---------------------------------------------------------------------- 49 INTEGER, INTENT(in) :: kt ! ocean time-step index 48 INTEGER, INTENT(in) :: kt ! ocean time-step index 49 INTEGER, INTENT(in) :: Kbb, Kmm ! ocean time level indices 50 50 !! 51 51 INTEGER :: jfl, jind ! dummy loop indices … … 127 127 128 128 ! for each step we compute the compute the velocity with Lagrange interpolation 129 CALL flo_interp( zgifl, zgjfl, zgkfl, zufl, zvfl, zwfl, jind )129 CALL flo_interp( Kbb, Kmm, zgifl, zgjfl, zgkfl, zufl, zvfl, zwfl, jind ) 130 130 131 131 ! computation of Runge-Kutta factor 132 132 DO jfl = 1, jpnfl 133 zrkxfl(jfl,jind) = r dt*zufl(jfl)134 zrkyfl(jfl,jind) = r dt*zvfl(jfl)135 zrkzfl(jfl,jind) = r dt*zwfl(jfl)133 zrkxfl(jfl,jind) = rn_Dt*zufl(jfl) 134 zrkyfl(jfl,jind) = rn_Dt*zvfl(jfl) 135 zrkzfl(jfl,jind) = rn_Dt*zwfl(jfl) 136 136 END DO 137 137 IF( jind /= 4 ) THEN … … 155 155 156 156 157 SUBROUTINE flo_interp( pxt , pyt , pzt , & 157 SUBROUTINE flo_interp( Kbb, Kmm, & 158 & pxt , pyt , pzt , & 158 159 & pufl, pvfl, pwfl, ki ) 159 160 !!---------------------------------------------------------------------- … … 167 168 !! integrated with RK method. 168 169 !!---------------------------------------------------------------------- 170 INTEGER , INTENT(in ) :: Kbb, Kmm ! ocean time level indices 169 171 REAL(wp) , DIMENSION(jpnfl), INTENT(in ) :: pxt , pyt , pzt ! position of the float 170 172 REAL(wp) , DIMENSION(jpnfl), INTENT( out) :: pufl, pvfl, pwfl ! velocity at this position … … 248 250 DO jind3 = 1, 4 249 251 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)) ) &252 & ( tcoef1(ki) * uu(iidu(jfl,jind1),ijdu(jfl,jind2),ikdu(jfl,jind3),Kbb) + & 253 & tcoef2(ki) * uu(iidu(jfl,jind1),ijdu(jfl,jind2),ikdu(jfl,jind3),Kmm) ) & 252 254 & / e1u(iidu(jfl,jind1),ijdu(jfl,jind2)) 253 255 END DO … … 332 334 DO jind3 = 1 ,4 333 335 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)) ) &336 & ( tcoef1(ki) * vv(iidv(jfl,jind1),ijdv(jfl,jind2),ikdv(jfl,jind3),Kbb) + & 337 & tcoef2(ki) * vv(iidv(jfl,jind1),ijdv(jfl,jind2),ikdv(jfl,jind3),Kmm) ) & 336 338 & / e2v(iidv(jfl,jind1),ijdv(jfl,jind2)) 337 339 END DO … … 424 426 ztwfl(jfl,jind1,jind2,jind3)= & 425 427 & ( 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))428 & tcoef2(ki) * ww(iidw(jfl,jind1),ijdw(jfl,jind2),ikdw(jfl,jind3)) ) & 429 & / e3w(iidw(jfl,jind1),ijdw(jfl,jind2),ikdw(jfl,jind3),Kmm) 428 430 END DO 429 431 END DO … … 445 447 END SUBROUTINE flo_interp 446 448 447 # else448 !!----------------------------------------------------------------------449 !! No floats Dummy module450 !!----------------------------------------------------------------------451 #endif452 453 449 !!====================================================================== 454 450 END MODULE flo4rk -
NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/OCE/FLO/flo_oce.F90
r10425 r13463 6 6 !! History : OPA ! 1999-10 (CLIPPER projet) 7 7 !! NEMO 1.0 ! 2002-11 (G. Madec, A. Bozec) F90: Free form and module 8 !!----------------------------------------------------------------------9 #if defined key_floats10 !!----------------------------------------------------------------------11 !! 'key_floats' drifting floats12 8 !!---------------------------------------------------------------------- 13 9 USE par_oce ! ocean parameters … … 20 16 PUBLIC flo_oce_alloc ! Routine called in floats.F90 21 17 22 LOGICAL, PUBLIC, PARAMETER :: lk_floats = .TRUE. !: float flag23 24 18 !! float parameters 25 19 !! ---------------- 20 LOGICAL, PUBLIC :: ln_floats !: Activate floats or not 26 21 INTEGER, PUBLIC :: jpnfl !: total number of floats during the run 27 22 INTEGER, PUBLIC :: jpnnewflo !: number of floats added in a new run … … 68 63 END FUNCTION flo_oce_alloc 69 64 70 #else71 !!----------------------------------------------------------------------72 !! Default option : NO drifting floats73 !!----------------------------------------------------------------------74 LOGICAL, PUBLIC, PARAMETER :: lk_floats = .FALSE. !: float flag75 #endif76 77 65 !!====================================================================== 78 66 END MODULE flo_oce -
NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/OCE/FLO/floats.F90
r10068 r13463 7 7 !! NEMO 1.0 ! 2002-06 (A. Bozec) F90, Free form and module 8 8 !!---------------------------------------------------------------------- 9 #if defined key_floats 10 !!---------------------------------------------------------------------- 11 !! 'key_floats' float trajectories 9 !! 12 10 !!---------------------------------------------------------------------- 13 11 !! flo_stp : float trajectories computation … … 30 28 31 29 PUBLIC flo_stp ! routine called by step.F90 32 PUBLIC flo_init ! routine called by opa.F9030 PUBLIC flo_init ! routine called by nemogcm.F90 33 31 34 32 !!---------------------------------------------------------------------- … … 39 37 CONTAINS 40 38 41 SUBROUTINE flo_stp( kt )39 SUBROUTINE flo_stp( kt, Kbb, Kmm ) 42 40 !!---------------------------------------------------------------------- 43 41 !! *** ROUTINE flo_stp *** … … 50 48 !! if ln_flork4 =T 51 49 !!---------------------------------------------------------------------- 52 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 53 52 !!---------------------------------------------------------------------- 54 53 ! 55 54 IF( ln_timing ) CALL timing_start('flo_stp') 56 55 ! 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' 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 59 58 ENDIF 60 59 ! 61 60 IF( lk_mpp ) CALL mppsync ! synchronization of all the processor 62 61 ! 63 CALL flo_wri( kt )! trajectories ouput62 CALL flo_wri( kt, Kmm ) ! trajectories ouput 64 63 ! 65 64 CALL flo_rst( kt ) ! trajectories restart 66 65 ! 67 wb(:,:,:) = w n(:,:,:) ! Save the old vertical velocity field66 wb(:,:,:) = ww(:,:,:) ! Save the old vertical velocity field 68 67 ! 69 68 IF( ln_timing ) CALL timing_stop('flo_stp') … … 72 71 73 72 74 SUBROUTINE flo_init 73 SUBROUTINE flo_init( Kmm ) 75 74 !!---------------------------------------------------------------- 76 75 !! *** ROUTINE flo_init *** … … 78 77 !! ** Purpose : Read the namelist of floats 79 78 !!---------------------------------------------------------------------- 79 INTEGER, INTENT(in) :: Kmm ! ocean time level index 80 ! 80 81 INTEGER :: jfl 81 82 INTEGER :: ios ! Local integer output status for namelist read 82 83 ! 83 NAMELIST/namflo/ jpnfl, jpnnewflo, ln_rstflo, nn_writefl, nn_stockfl, ln_argo, ln_flork4, ln_ariane, ln_flo_ascii84 NAMELIST/namflo/ ln_floats, jpnfl, jpnnewflo, ln_rstflo, nn_writefl, nn_stockfl, ln_argo, ln_flork4, ln_ariane, ln_flo_ascii 84 85 !!--------------------------------------------------------------------- 85 86 ! … … 88 89 IF(lwp) WRITE(numout,*) '~~~~~~~' 89 90 90 REWIND( numnam_ref ) ! Namelist namflo in reference namelist : Floats91 91 READ ( numnam_ref, namflo, IOSTAT = ios, ERR = 901) 92 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namflo in reference namelist' , lwp)92 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namflo in reference namelist' ) 93 93 94 REWIND( numnam_cfg ) ! Namelist namflo in configuration namelist : Floats95 94 READ ( numnam_cfg, namflo, IOSTAT = ios, ERR = 902 ) 96 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namflo in configuration namelist' , lwp)95 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namflo in configuration namelist' ) 97 96 IF(lwm) WRITE ( numond, namflo ) 98 97 ! … … 100 99 WRITE(numout,*) 101 100 WRITE(numout,*) ' Namelist floats :' 102 WRITE(numout,*) ' number of floats jpnfl = ', jpnfl 103 WRITE(numout,*) ' number of new floats jpnflnewflo = ', jpnnewflo 104 WRITE(numout,*) ' restart ln_rstflo = ', ln_rstflo 105 WRITE(numout,*) ' frequency of float output file nn_writefl = ', nn_writefl 106 WRITE(numout,*) ' frequency of float restart file nn_stockfl = ', nn_stockfl 107 WRITE(numout,*) ' Argo type floats ln_argo = ', ln_argo 108 WRITE(numout,*) ' Computation of T trajectories ln_flork4 = ', ln_flork4 109 WRITE(numout,*) ' Use of ariane convention ln_ariane = ', ln_ariane 110 WRITE(numout,*) ' ascii output (T) or netcdf output (F) ln_flo_ascii = ', ln_flo_ascii 101 WRITE(numout,*) ' Activate floats or not ln_floats = ', ln_floats 102 WRITE(numout,*) ' number of floats jpnfl = ', jpnfl 103 WRITE(numout,*) ' number of new floats jpnflnewflo = ', jpnnewflo 104 WRITE(numout,*) ' restart ln_rstflo = ', ln_rstflo 105 WRITE(numout,*) ' frequency of float output file nn_writefl = ', nn_writefl 106 WRITE(numout,*) ' frequency of float restart file nn_stockfl = ', nn_stockfl 107 WRITE(numout,*) ' Argo type floats ln_argo = ', ln_argo 108 WRITE(numout,*) ' Computation of T trajectories ln_flork4 = ', ln_flork4 109 WRITE(numout,*) ' Use of ariane convention ln_ariane = ', ln_ariane 110 WRITE(numout,*) ' ascii output (T) or netcdf output (F) ln_flo_ascii = ', ln_flo_ascii 111 111 112 112 ENDIF 113 113 ! 114 ! ! allocate floats arrays 115 IF( flo_oce_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'flo_init : unable to allocate arrays' ) 116 ! 117 ! ! allocate flodom arrays 118 IF( flo_dom_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'flo_dom : unable to allocate arrays' ) 119 ! 120 ! ! allocate flowri arrays 121 IF( flo_wri_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'flo_wri : unable to allocate arrays' ) 122 ! 123 ! ! allocate florst arrays 124 IF( flo_rst_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'flo_rst : unable to allocate arrays' ) 125 ! 126 jpnrstflo = jpnfl-jpnnewflo ! memory allocation 127 ! 128 DO jfl = 1, jpnfl ! vertical axe for netcdf IOM ouput 129 nfloat(jfl) = jfl 130 END DO 131 ! 132 CALL flo_dom ! compute/read initial position of floats 133 ! 134 wb(:,:,:) = wn(:,:,:) ! set wb for computation of floats trajectories at the first time step 135 ! 114 IF( ln_floats ) THEN 115 ! ! allocate floats arrays 116 IF( flo_oce_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'flo_init : unable to allocate arrays' ) 117 ! 118 ! ! allocate flodom arrays 119 IF( flo_dom_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'flo_dom : unable to allocate arrays' ) 120 ! 121 ! ! allocate flowri arrays 122 IF( flo_wri_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'flo_wri : unable to allocate arrays' ) 123 ! 124 ! ! allocate florst arrays 125 IF( flo_rst_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'flo_rst : unable to allocate arrays' ) 126 ! 127 jpnrstflo = jpnfl-jpnnewflo ! memory allocation 128 ! 129 DO jfl = 1, jpnfl ! vertical axe for netcdf IOM ouput 130 nfloat(jfl) = jfl 131 END DO 132 ! 133 CALL flo_dom( Kmm ) ! compute/read initial position of floats 134 ! 135 wb(:,:,:) = ww(:,:,:) ! set wb for computation of floats trajectories at the first time step 136 ! 137 ENDIF 136 138 END SUBROUTINE flo_init 137 138 # else139 !!----------------------------------------------------------------------140 !! Default option : Empty module141 !!----------------------------------------------------------------------142 CONTAINS143 SUBROUTINE flo_stp( kt ) ! Empty routine144 IMPLICIT NONE145 INTEGER, INTENT( in ) :: kt146 WRITE(*,*) 'flo_stp: You should not have seen this print! error?', kt147 END SUBROUTINE flo_stp148 SUBROUTINE flo_init ! Empty routine149 IMPLICIT NONE150 END SUBROUTINE flo_init151 #endif152 139 153 140 !!====================================================================== -
NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/OCE/FLO/floblk.F90
r10425 r13463 4 4 !! Ocean floats : trajectory computation 5 5 !!====================================================================== 6 #if defined key_floats 7 !!---------------------------------------------------------------------- 8 !! 'key_floats' float trajectories 6 !! 9 7 !!---------------------------------------------------------------------- 10 8 !! flotblk : compute float trajectories with Blanke algorithme … … 22 20 PUBLIC flo_blk ! routine called by floats.F90 23 21 22 # include "domzgr_substitute.h90" 23 24 24 !!---------------------------------------------------------------------- 25 25 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 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 !! 45 #ifndef key_agrif 46 47 !RB super quick fix to compile with agrif 48 44 49 INTEGER :: jfl ! dummy loop arguments 45 50 INTEGER :: ind, ifin, iloop … … 101 106 222 DO jfl = 1, jpnfl 102 107 # if defined key_mpp_mpi 103 IF( iil(jfl) >= mig( nldi) .AND. iil(jfl) <= mig(nlei) .AND. &104 ijl(jfl) >= mjg( nldj) .AND. ijl(jfl) <= mjg(nlej) ) THEN108 IF( iil(jfl) >= mig(Nis0) .AND. iil(jfl) <= mig(Nie0) .AND. & 109 ijl(jfl) >= mjg(Njs0) .AND. ijl(jfl) <= mjg(Nje0) ) THEN 105 110 iiloc(jfl) = iil(jfl) - mig(1) + 1 106 111 ijloc(jfl) = ijl(jfl) - mjg(1) + 1 … … 112 117 ! compute the transport across the mesh where the float is. 113 118 !!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)) 119 zsurfx(1) = & 120 & e2u(iiloc(jfl)-1,ijloc(jfl) ) & 121 & * e3u(iiloc(jfl)-1,ijloc(jfl) ,-ikl(jfl),Kmm) 122 zsurfx(2) = & 123 & e2u(iiloc(jfl) ,ijloc(jfl) ) & 124 & * e3u(iiloc(jfl) ,ijloc(jfl) ,-ikl(jfl),Kmm) 125 zsurfy(1) = & 126 & e1v(iiloc(jfl) ,ijloc(jfl)-1) & 127 & * e3v(iiloc(jfl) ,ijloc(jfl)-1,-ikl(jfl),Kmm) 128 zsurfy(2) = & 129 & e1v(iiloc(jfl) ,ijloc(jfl) ) & 130 & * e3v(iiloc(jfl) ,ijloc(jfl) ,-ikl(jfl),Kmm) 118 131 119 132 ! for a isobar float zsurfz is put to zero. The vertical velocity will be zero too. 120 133 zsurfz = e1e2t(iiloc(jfl),ijloc(jfl)) 121 zvol = zsurfz * e3t _n(iiloc(jfl),ijloc(jfl),-ikl(jfl))134 zvol = zsurfz * e3t(iiloc(jfl),ijloc(jfl),-ikl(jfl),Kmm) 122 135 123 136 ! 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)137 zuinfl =( uu(iiloc(jfl)-1,ijloc(jfl),-ikl(jfl),Kbb) + uu(iiloc(jfl)-1,ijloc(jfl),-ikl(jfl),Kmm) )/2.*zsurfx(1) 138 zuoutfl=( uu(iiloc(jfl) ,ijloc(jfl),-ikl(jfl),Kbb) + uu(iiloc(jfl) ,ijloc(jfl),-ikl(jfl),Kmm) )/2.*zsurfx(2) 139 zvinfl =( vv(iiloc(jfl),ijloc(jfl)-1,-ikl(jfl),Kbb) + vv(iiloc(jfl),ijloc(jfl)-1,-ikl(jfl),Kmm) )/2.*zsurfy(1) 140 zvoutfl=( vv(iiloc(jfl),ijloc(jfl) ,-ikl(jfl),Kbb) + vv(iiloc(jfl),ijloc(jfl) ,-ikl(jfl),Kmm) )/2.*zsurfy(2) 128 141 zwinfl =-(wb(iiloc(jfl),ijloc(jfl),-(ikl(jfl)-1)) & 129 & + w n(iiloc(jfl),ijloc(jfl),-(ikl(jfl)-1)) )/2. * zsurfz*nisobfl(jfl)142 & + ww(iiloc(jfl),ijloc(jfl),-(ikl(jfl)-1)) )/2. * zsurfz*nisobfl(jfl) 130 143 zwoutfl=-(wb(iiloc(jfl),ijloc(jfl),- ikl(jfl) ) & 131 & + w n(iiloc(jfl),ijloc(jfl),- ikl(jfl) ) )/2. * zsurfz*nisobfl(jfl)144 & + ww(iiloc(jfl),ijloc(jfl),- ikl(jfl) ) )/2. * zsurfz*nisobfl(jfl) 132 145 133 146 ! interpolation of velocity field on the float initial position … … 176 189 zgidfl(jfl) = float(iioutfl(jfl) - iiinfl(jfl)) 177 190 IF( zufl(jfl)*zuoutfl <= 0. ) THEN 178 ztxfl(jfl) = 1.E99191 ztxfl(jfl) = HUGE(1._wp) 179 192 ELSE 180 193 IF( ABS(zudfl(jfl)) >= 1.E-5 ) THEN … … 192 205 zgjdfl(jfl) = float(ijoutfl(jfl)-ijinfl(jfl)) 193 206 IF( zvfl(jfl)*zvoutfl <= 0. ) THEN 194 ztyfl(jfl) = 1.E99207 ztyfl(jfl) = HUGE(1._wp) 195 208 ELSE 196 209 IF( ABS(zvdfl(jfl)) >= 1.E-5 ) THEN … … 209 222 zgkdfl(jfl) = float(ikoutfl(jfl) - ikinfl(jfl)) 210 223 IF( zwfl(jfl)*zwoutfl <= 0. ) THEN 211 ztzfl(jfl) = 1.E99224 ztzfl(jfl) = HUGE(1._wp) 212 225 ELSE 213 226 IF( ABS(zwdfl(jfl)) >= 1.E-5 ) THEN … … 234 247 ! test to know if the "age" of the float is not bigger than the 235 248 ! time step 236 IF( zagenewfl(jfl) > r dt ) THEN237 zttfl(jfl) = (r dt-zagefl(jfl)) / zvol238 zagenewfl(jfl) = r dt249 IF( zagenewfl(jfl) > rn_Dt ) THEN 250 zttfl(jfl) = (rn_Dt-zagefl(jfl)) / zvol 251 zagenewfl(jfl) = rn_Dt 239 252 ENDIF 240 253 … … 341 354 ifin = 1 342 355 DO jfl = 1, jpnfl 343 IF( zagefl(jfl) < r dt ) ifin = 0356 IF( zagefl(jfl) < rn_Dt ) ifin = 0 344 357 tpifl(jfl) = zgifl(jfl) + 0.5 345 358 tpjfl(jfl) = zgjfl(jfl) + 0.5 … … 348 361 ifin = 1 349 362 DO jfl = 1, jpnfl 350 IF( zagefl(jfl) < r dt ) ifin = 0363 IF( zagefl(jfl) < rn_Dt ) ifin = 0 351 364 tpifl(jfl) = zgifl(jfl) + 0.5 352 365 tpjfl(jfl) = zgjfl(jfl) + 0.5 … … 365 378 GO TO 222 366 379 ENDIF 380 #endif 367 381 ! 368 382 ! 369 383 END SUBROUTINE flo_blk 370 384 371 # else372 !!----------------------------------------------------------------------373 !! Default option Empty module374 !!----------------------------------------------------------------------375 CONTAINS376 SUBROUTINE flo_blk ! Empty routine377 END SUBROUTINE flo_blk378 #endif379 380 385 !!====================================================================== 381 386 END MODULE floblk -
NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/OCE/FLO/flodom.F90
r10425 r13463 6 6 !! History : OPA ! 1998-07 (Y.Drillet, CLIPPER) Original code 7 7 !! NEMO 3.3 ! 2011-09 (C.Bricaud,S.Law-Chune Mercator-Ocean): add ARIANE convention + comsecitc changes 8 !!----------------------------------------------------------------------9 #if defined key_floats10 !!----------------------------------------------------------------------11 !! 'key_floats' float trajectories12 8 !!---------------------------------------------------------------------- 13 9 !! flo_dom : initialization of floats … … 44 40 CONTAINS 45 41 46 SUBROUTINE flo_dom 42 SUBROUTINE flo_dom( Kmm ) 47 43 !! --------------------------------------------------------------------- 48 44 !! *** ROUTINE flo_dom *** … … 53 49 !! the longitude (degree) and the depth (m). 54 50 !!---------------------------------------------------------------------- 51 INTEGER, INTENT(in) :: Kmm ! ocean time level index 52 ! 55 53 INTEGER :: jfl ! dummy loop 56 54 INTEGER :: inum ! logical unit for file read … … 94 92 CALL flo_add_new_ariane_floats(jpnrstflo+1,jpnfl) 95 93 ELSE !Add new floats with long/lat convention 96 CALL flo_add_new_floats( jpnrstflo+1,jpnfl)94 CALL flo_add_new_floats(Kmm,jpnrstflo+1,jpnfl) 97 95 ENDIF 98 96 ENDIF … … 106 104 CALL flo_add_new_ariane_floats(1,jpnfl) 107 105 ELSE !Add new floats with long/lat convention 108 CALL flo_add_new_floats( 1,jpnfl)106 CALL flo_add_new_floats(Kmm,1,jpnfl) 109 107 ENDIF 110 108 … … 113 111 END SUBROUTINE flo_dom 114 112 115 SUBROUTINE flo_add_new_floats( kfl_start, kfl_end)113 SUBROUTINE flo_add_new_floats(Kmm, kfl_start, kfl_end) 116 114 !! ------------------------------------------------------------- 117 115 !! *** SUBROUTINE add_new_arianefloats *** … … 128 126 !! ** Method : 129 127 !!---------------------------------------------------------------------- 128 INTEGER, INTENT(in) :: Kmm 130 129 INTEGER, INTENT(in) :: kfl_start, kfl_end 131 130 !! … … 156 155 ikmfl(jfl) = 0 157 156 # if defined key_mpp_mpi 158 DO ji = MAX( nldi,2), nlei159 DO jj = MAX( nldj,2), nlej! NO vector opt.157 DO ji = MAX(Nis0,2), Nie0 158 DO jj = MAX(Njs0,2), Nje0 ! NO vector opt. 160 159 # else 161 160 DO ji = 2, jpi … … 174 173 ihtest(jfl) = ihtest(jfl)+1 175 174 DO jk = 1, jpk-1 176 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 177 176 ikmfl(jfl) = jk 178 177 ivtest(jfl) = ivtest(jfl) + 1 … … 236 235 zgifl(jfl)= (iimfl(jfl)-0.5) + zdxab/e1u(iimfl(jfl)-1,ijmfl(jfl)) + (mig(1)-1) 237 236 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)) )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) ) 244 243 ELSE 245 244 zgifl(jfl) = 0.e0 … … 437 436 IF( ABS(dlx) > 1.0_wp ) dlx = 1.0_wp 438 437 ! 439 dld = ATAN( DSQRT( 1._wp * ( 1._wp-dlx )/( 1._wp+dlx ) )) * 222.24_wp / dls438 dld = ATAN(SQRT( 1._wp * ( 1._wp-dlx )/( 1._wp+dlx ) )) * 222.24_wp / dls 440 439 flo_dstnce = dld * 1000._wp 441 440 ! … … 455 454 END FUNCTION flo_dom_alloc 456 455 457 458 #else459 !!----------------------------------------------------------------------460 !! Default option Empty module461 !!----------------------------------------------------------------------462 CONTAINS463 SUBROUTINE flo_dom ! Empty routine464 WRITE(*,*) 'flo_dom: : You should not have seen this print! error?'465 END SUBROUTINE flo_dom466 #endif467 468 456 !!====================================================================== 469 457 END MODULE flodom -
NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/OCE/FLO/florst.F90
r10425 r13463 8 8 !! NEMO 1.0 ! 2002-10 (A. Bozec) F90 : Free form and module 9 9 !! 3.2 ! 2010-08 (slaw, cbricaud): netcdf outputs and others 10 !!----------------------------------------------------------------------11 #if defined key_floats12 !!----------------------------------------------------------------------13 !! 'key_floats' float trajectories14 10 !!---------------------------------------------------------------------- 15 11 USE flo_oce ! ocean drifting floats … … 102 98 IF( lk_mpp ) THEN 103 99 DO jfl = 1, jpnfl 104 IF( (INT(tpifl(jfl)) >= mig( nldi)) .AND. &105 &(INT(tpifl(jfl)) <= mig( nlei)) .AND. &106 &(INT(tpjfl(jfl)) >= mjg( nldj)) .AND. &107 &(INT(tpjfl(jfl)) <= mjg( nlej)) ) THEN100 IF( (INT(tpifl(jfl)) >= mig(Nis0)) .AND. & 101 &(INT(tpifl(jfl)) <= mig(Nie0)) .AND. & 102 &(INT(tpjfl(jfl)) >= mjg(Njs0)) .AND. & 103 &(INT(tpjfl(jfl)) <= mjg(Nje0)) ) THEN 108 104 iperproc(narea) = iperproc(narea)+1 109 105 ENDIF … … 125 121 END SUBROUTINE flo_rst 126 122 127 # else128 !!----------------------------------------------------------------------129 !! Default option Empty module130 !!----------------------------------------------------------------------131 CONTAINS132 SUBROUTINE flo_rst ! Empty routine133 END SUBROUTINE flo_rst134 #endif135 136 123 !!======================================================================= 137 124 END MODULE florst -
NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/OCE/FLO/flowri.F90
r10425 r13463 11 11 !! 3.2 ! 2010-08 (slaw, cbricaud): netcdf outputs and others 12 12 !!---------------------------------------------------------------------- 13 #if defined key_floats14 !!----------------------------------------------------------------------15 !! 'key_floats' float trajectories16 !!----------------------------------------------------------------------17 13 USE flo_oce ! ocean drifting floats 18 14 USE oce ! ocean dynamics and tracers … … 55 51 END FUNCTION flo_wri_alloc 56 52 57 SUBROUTINE flo_wri( kt )53 SUBROUTINE flo_wri( kt, Kmm ) 58 54 !!--------------------------------------------------------------------- 59 55 !! *** ROUTINE flo_wri *** … … 68 64 !!---------------------------------------------------------------------- 69 65 !! * Arguments 70 INTEGER :: kt ! time step 66 INTEGER, INTENT(in) :: kt ! time step 67 INTEGER, INTENT(in) :: Kmm ! time level index 71 68 72 69 !! * Local declarations … … 108 105 ibfloc = mj1( ibfl ) 109 106 110 IF( nldi <= iafloc .AND. iafloc <= nlei.AND. &111 & nldj <= ibfloc .AND. ibfloc <= nlej) THEN107 IF( Nis0 <= iafloc .AND. iafloc <= Nie0 .AND. & 108 & Njs0 <= ibfloc .AND. ibfloc <= Nje0 ) THEN 112 109 113 110 !the float is inside of current proc's area … … 120 117 zlon(jfl) = (1.-zafl)*(1.-zbfl)*glamt(iafloc ,ibfloc ) + (1.-zafl) * zbfl * glamt(iafloc ,ib1floc) & 121 118 + 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)119 zdep(jfl) = (1.-zcfl)*gdepw(iafloc,ibfloc,icfl ,Kmm) + zcfl * gdepw(iafloc,ibfloc,ic1fl,Kmm) 123 120 124 121 !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)127 zrho (jfl) = (rhd(iafloc,ibfloc,icfl)+1)*r au0122 ztem(jfl) = ts(iafloc,ibfloc,icfl,jp_tem,Kmm) 123 zsal (jfl) = ts(iafloc,ibfloc,icfl,jp_sal,Kmm) 124 zrho (jfl) = (rhd(iafloc,ibfloc,icfl)+1)*rho0 128 125 129 126 ENDIF … … 141 138 zlon(jfl) = (1.-zafl)*(1.-zbfl)*glamt(iafloc ,ibfloc ) + (1.-zafl) * zbfl * glamt(iafloc ,ib1floc) & 142 139 + 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)147 zrho(jfl) = (rhd(iafloc,ibfloc,icfl)+1)*r au0140 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) 144 zrho(jfl) = (rhd(iafloc,ibfloc,icfl)+1)*rho0 148 145 149 146 ENDIF … … 179 176 CALL ctl_opn( numflo, 'trajec_float', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. ) 180 177 irecflo = NINT( (nitend-nn_it000) / FLOAT(nn_writefl) ) 181 WRITE(numflo,*) cexper,no,irecflo,jpnfl,nn_writefl178 WRITE(numflo,*) cexper, irecflo, jpnfl, nn_writefl 182 179 ENDIF 183 180 … … 225 222 clname=TRIM(clname)//".nc" 226 223 227 CALL fliocrfd( clname , (/ 'ntraj' , 't' /), (/ jpnfl , -1/) , numflo )224 CALL fliocrfd( clname , (/'ntraj' , ' t' /), (/ jpnfl , -1/) , numflo ) 228 225 229 226 CALL fliodefv( numflo, 'traj_lon' , (/1,2/), v_t=flio_r8, long_name="Longitude" , units="degrees_east" ) … … 248 245 !------------------------------- 249 246 irec = INT( (kt-nn_it000+1)/nn_writefl ) +1 250 ztime = ( kt-nn_it000 + 1 ) * r dt247 ztime = ( kt-nn_it000 + 1 ) * rn_Dt 251 248 252 249 CALL flioputv( numflo , 'time_counter', ztime , start=(/irec/) ) … … 255 252 256 253 istart = (/jfl,irec/) 257 icfl = INT( tpkfl(jfl) ) ! K-index of the nearest point before 258 259 CALL flioputv( numflo , 'traj_lon' , zlon(jfl) , start=istart ) 260 CALL flioputv( numflo , 'traj_lat' , zlat(jfl) , start=istart ) 261 CALL flioputv( numflo , 'traj_depth' , zdep(jfl) , start=istart ) 262 CALL flioputv( numflo , 'traj_temp' , ztemp(icfl,jfl) , start=istart ) 263 CALL flioputv( numflo , 'traj_salt' , zsal(icfl,jfl) , start=istart ) 264 CALL flioputv( numflo , 'traj_dens' , zrho(icfl,jfl) , start=istart ) 254 255 CALL flioputv( numflo , 'traj_lon' , zlon(jfl), start=istart ) 256 CALL flioputv( numflo , 'traj_lat' , zlat(jfl), start=istart ) 257 CALL flioputv( numflo , 'traj_depth' , zdep(jfl), start=istart ) 258 CALL flioputv( numflo , 'traj_temp' , ztem(jfl), start=istart ) 259 CALL flioputv( numflo , 'traj_salt' , zsal(jfl), start=istart ) 260 CALL flioputv( numflo , 'traj_dens' , zrho(jfl), start=istart ) 265 261 266 262 ENDDO … … 277 273 END SUBROUTINE flo_wri 278 274 279 280 # else281 !!----------------------------------------------------------------------282 !! Default option Empty module283 !!----------------------------------------------------------------------284 CONTAINS285 SUBROUTINE flo_wri ! Empty routine286 END SUBROUTINE flo_wri287 #endif288 289 275 !!======================================================================= 290 276 END MODULE flowri
Note: See TracChangeset
for help on using the changeset viewer.