Changeset 16 for trunk/NEMO/OPA_SRC/FLO/flodom.F90
- Timestamp:
- 2004-02-17T09:06:15+01:00 (20 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/OPA_SRC/FLO/flodom.F90
r3 r16 13 13 !!---------------------------------------------------------------------- 14 14 !! * Modules used 15 USE flo_oce ! ocean drifting floats16 15 USE oce ! ocean dynamics and tracers 17 16 USE dom_oce ! ocean space and time domain 17 USE flo_oce ! ocean drifting floats 18 ! USE floats 19 USE in_out_manager ! I/O manager 18 20 USE lib_mpp ! distribued memory computing library 19 21 … … 43 45 !!---------------------------------------------------------------------- 44 46 !! * Local declarations 45 LOGICAL 47 LOGICAL :: llinmesh 46 48 CHARACTER (len=21) :: clname 47 INTEGER 48 INTEGER 49 INTEGER 50 INTEGER 49 INTEGER :: ji, jj, jk ! DO loop index on 3 directions 50 INTEGER :: jfl, jfl1 ! number of floats 51 INTEGER :: inum = 11 ! logical unit for file read 52 INTEGER, DIMENSION ( jpnfl ) :: & 51 53 iimfl, ijmfl, ikmfl, & ! index mesh of floats 52 54 idomfl, ivtest, ihtest 53 REAL(wp) :: zdxab,zdyad54 REAL(wp) , DIMENSION ( jpnnewfl) :: zgifl, zgjfl, zgkfl55 REAL(wp) :: zdxab, zdyad 56 REAL(wp), DIMENSION ( jpnnewflo+1 ) :: zgifl, zgjfl, zgkfl 55 57 !!--------------------------------------------------------------------- 56 58 … … 61 63 IF(lwp) WRITE(numout,*) ' jpnfl = ',jpnfl 62 64 63 IF(ln_rst arfl) THEN65 IF(ln_rstflo) THEN 64 66 IF(lwp) WRITE(numout,*) ' float restart file read' 65 67 … … 70 72 71 73 ! read of the restart file 72 READ(inum) ( tpifl (jfl), jfl=1, jpnrst arfl), &73 ( tpjfl (jfl), jfl=1, jpnrst arfl), &74 ( tpkfl (jfl), jfl=1, jpnrst arfl), &75 ( nisobfl(jfl), jfl=1, jpnrst arfl), &76 ( ngrpfl (jfl), jfl=1, jpnrst arfl)74 READ(inum) ( tpifl (jfl), jfl=1, jpnrstflo), & 75 ( tpjfl (jfl), jfl=1, jpnrstflo), & 76 ( tpkfl (jfl), jfl=1, jpnrstflo), & 77 ( nisobfl(jfl), jfl=1, jpnrstflo), & 78 ( ngrpfl (jfl), jfl=1, jpnrstflo) 77 79 CLOSE(inum) 78 80 79 81 ! if we want a surface drift ( like PROVOR floats ) 80 82 IF( ln_argo ) THEN 81 DO jfl = 1, jpnrst arfl83 DO jfl = 1, jpnrstflo 82 84 nisobfl(jfl) = 0 83 85 END DO … … 87 89 88 90 ! It is possible to add new floats. 89 IF(lwp) WRITE(numout,*)' flo_dom:jpnfl jpnrst arfl ',jpnfl,jpnrstarfl90 IF( jpnfl > jpnrst arfl) THEN91 IF(lwp) WRITE(numout,*)' flo_dom:jpnfl jpnrstflo ',jpnfl,jpnrstflo 92 IF( jpnfl > jpnrstflo ) THEN 91 93 ! open the init file 92 94 clname='init_float' 93 95 OPEN(inum,FILE=clname,FORM='FORMATTED') 94 DO jfl = jpnrst arfl+1, jpnfl96 DO jfl = jpnrstflo+1, jpnfl 95 97 READ(inum,*) flxx(jfl),flyy(jfl),flzz(jfl), nisobfl(jfl),ngrpfl(jfl),jfl1 96 98 END DO … … 99 101 100 102 ! Test to find the grid point coordonate with the geographical position 101 DO jfl = jpnrst arfl+1, jpnfl103 DO jfl = jpnrstflo+1, jpnfl 102 104 ihtest(jfl) = 0 103 105 ivtest(jfl) = 0 104 106 ikmfl(jfl) = 0 105 # if defined key_mpp107 # if defined key_mpp_mpi || defined key_mpp_shmem 106 108 DO ji = MAX(nldi,2), nlei 107 109 DO jj = MAX(nldj,2), nlej … … 140 142 141 143 ! A zero in the sum of the arrays "ihtest" and "ivtest" 142 # if defined key_mpp143 CALL mpp_sum(ihtest,jpnfl ,iwork)144 CALL mpp_sum(ivtest,jpnfl ,iwork)144 # if defined key_mpp_mpi || defined key_mpp_shmem 145 CALL mpp_sum(ihtest,jpnfl) 146 CALL mpp_sum(ivtest,jpnfl) 145 147 # endif 146 DO jfl = jpnrst arfl+1, jpnfl148 DO jfl = jpnrstflo+1, jpnfl 147 149 IF( (ihtest(jfl) > 1 ) .OR. ( ivtest(jfl) > 1) ) THEN 148 150 IF(lwp) WRITE(numout,*) 'THE FLOAT',jfl,' IS NOT IN ONLY ONE MESH' … … 156 158 157 159 ! We compute the distance between the float and the face of the mesh 158 DO jfl = jpnrst arfl+1, jpnfl160 DO jfl = jpnrstflo+1, jpnfl 159 161 ! Made only if the float is in the domain of the processor 160 162 IF( (iimfl(jfl) >= 0) .AND. (ijmfl(jfl) >= 0) ) THEN … … 182 184 ! Translation of this distances (in meter) in indexes 183 185 184 zgifl(jfl-jpnrst arfl)= (iimfl(jfl)-0.5) + zdxab/e1u(iimfl(jfl)-1,ijmfl(jfl)) + (mig(1)-jpizoom)185 zgjfl(jfl-jpnrst arfl)= (ijmfl(jfl)-0.5) + zdyad/e2v(iimfl(jfl),ijmfl(jfl)-1) + (mjg(1)-jpjzoom)186 zgkfl(jfl-jpnrst arfl) = (( fsdepw(ji,jj,ikmfl(jfl)+1) - flzz(jfl) )* ikmfl(jfl)) &186 zgifl(jfl-jpnrstflo)= (iimfl(jfl)-0.5) + zdxab/e1u(iimfl(jfl)-1,ijmfl(jfl)) + (mig(1)-jpizoom) 187 zgjfl(jfl-jpnrstflo)= (ijmfl(jfl)-0.5) + zdyad/e2v(iimfl(jfl),ijmfl(jfl)-1) + (mjg(1)-jpjzoom) 188 zgkfl(jfl-jpnrstflo) = (( fsdepw(ji,jj,ikmfl(jfl)+1) - flzz(jfl) )* ikmfl(jfl)) & 187 189 / ( fsdepw(ji,jj,ikmfl(jfl)+1) - fsdepw(ji,jj,ikmfl(jfl) ) ) & 188 190 + (( flzz(jfl)-fsdepw(ji,jj,ikmfl(jfl)) ) *(ikmfl(jfl)+1)) & 189 191 / ( fsdepw(ji,jj,ikmfl(jfl)+1) - fsdepw(ji,jj,ikmfl(jfl)) ) 190 192 ELSE 191 zgifl(jfl-jpnrst arfl) = 0.192 zgjfl(jfl-jpnrst arfl) = 0.193 zgkfl(jfl-jpnrst arfl) = 0.193 zgifl(jfl-jpnrstflo) = 0. 194 zgjfl(jfl-jpnrstflo) = 0. 195 zgkfl(jfl-jpnrstflo) = 0. 194 196 ENDIF 195 197 END DO 196 198 197 199 ! The sum of all the arrays zgifl, zgjfl, zgkfl give 3 arrays with the positions of all the floats. 198 # if defined key_mpp 199 200 CALL mpp_sum( zgjfl, jpnnewfl ) 201 CALL mpp_sum( zgkfl, jpnnewfl ) 202 IF(lwp) WRITE(numout,*) (zgifl(jfl),jfl=1,jpnnewfl) 203 IF(lwp) WRITE(numout,*) (zgjfl(jfl),jfl=1,jpnnewfl) 204 IF(lwp) WRITE(numout,*) (zgkfl(jfl),jfl=1,jpnnewfl) 205 # endif 200 IF( lk_mpp ) THEN 201 CALL mpp_sum( zgjfl, jpnnewflo ) ! sums over the global domain 202 CALL mpp_sum( zgkfl, jpnnewflo ) 203 IF(lwp) WRITE(numout,*) (zgifl(jfl),jfl=1,jpnnewflo) 204 IF(lwp) WRITE(numout,*) (zgjfl(jfl),jfl=1,jpnnewflo) 205 IF(lwp) WRITE(numout,*) (zgkfl(jfl),jfl=1,jpnnewflo) 206 ENDIF 206 207 207 DO jfl = jpnrst arfl+1, jpnfl208 tpifl(jfl) = zgifl(jfl-jpnrst arfl)209 tpjfl(jfl) = zgjfl(jfl-jpnrst arfl)210 tpkfl(jfl) = zgkfl(jfl-jpnrst arfl)208 DO jfl = jpnrstflo+1, jpnfl 209 tpifl(jfl) = zgifl(jfl-jpnrstflo) 210 tpjfl(jfl) = zgjfl(jfl-jpnrstflo) 211 tpkfl(jfl) = zgkfl(jfl-jpnrstflo) 211 212 END DO 212 213 ENDIF … … 234 235 ivtest(jfl) = 0 235 236 ikmfl(jfl) = 0 236 # if defined key_mpp237 # if defined key_mpp_mpi || defined key_mpp_shmem 237 238 DO ji = MAX(nldi,2), nlei 238 239 DO jj = MAX(nldj,2), nlej … … 271 272 272 273 ! A zero in the sum of the arrays "ihtest" and "ivtest" 273 # if defined key_mpp 274 CALL mpp_sum(ihtest,jpnfl,iwork) 275 CALL mpp_sum(ivtest,jpnfl,iwork) 276 # endif 274 IF( lk_mpp ) CALL mpp_sum(ihtest,jpnfl) ! sums over the global domain 275 IF( lk_mpp ) CALL mpp_sum(ivtest,jpnfl) 277 276 278 277 DO jfl = 1, jpnfl … … 327 326 328 327 ! The sum of all the arrays tpifl, tpjfl, tpkfl give 3 arrays with the positions of all the floats. 329 # if defined key_mpp 330 CALL mpp_sum( tpifl , jpnfl ) 331 CALL mpp_sum( tpjfl , jpnfl ) 332 CALL mpp_sum( tpkfl , jpnfl ) 333 CALL mpp_sum( idomfl, jpnfl ) 334 # endif 328 IF( lk_mpp ) CALL mpp_sum( tpifl , jpnfl ) ! sums over the global domain 329 IF( lk_mpp ) CALL mpp_sum( tpjfl , jpnfl ) 330 IF( lk_mpp ) CALL mpp_sum( tpkfl , jpnfl ) 331 IF( lk_mpp ) CALL mpp_sum( idomfl, jpnfl ) 335 332 ENDIF 336 333 337 334 ! Print the initial positions of the floats 338 IF( .NOT. ln_rst arfl) THEN335 IF( .NOT. ln_rstflo ) THEN 339 336 ! WARNING : initial position not in the sea 340 337 DO jfl = 1, jpnfl
Note: See TracChangeset
for help on using the changeset viewer.