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 16 for trunk/NEMO/OPA_SRC/FLO/flodom.F90 – NEMO

Ignore:
Timestamp:
2004-02-17T09:06:15+01:00 (20 years ago)
Author:
opalod
Message:

CT : UPDATE001 : First major NEMO update

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/OPA_SRC/FLO/flodom.F90

    r3 r16  
    1313   !!---------------------------------------------------------------------- 
    1414   !! * Modules used 
    15    USE flo_oce         ! ocean drifting floats 
    1615   USE oce             ! ocean dynamics and tracers 
    1716   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 
    1820   USE lib_mpp         ! distribued memory computing library 
    1921 
     
    4345      !!----------------------------------------------------------------------       
    4446      !! * Local declarations 
    45       LOGICAL   :: llinmesh 
     47      LOGICAL  :: llinmesh 
    4648      CHARACTER (len=21) ::  clname 
    47       INTEGER   :: ji, jj, jk               ! DO loop index on 3 directions 
    48       INTEGER   :: jfl, jfl1                ! number of floats    
    49       INTEGER   :: inum = 11                ! logical unit for file read 
    50       INTEGER , DIMENSION ( jpnfl    )  ::   & 
     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    )  ::   & 
    5153         iimfl, ijmfl, ikmfl,    &          ! index mesh of floats 
    5254         idomfl,  ivtest, ihtest 
    53       REAL(wp)  :: zdxab,zdyad 
    54       REAL(wp) , DIMENSION ( jpnnewfl )  :: zgifl, zgjfl,  zgkfl 
     55      REAL(wp) :: zdxab, zdyad 
     56      REAL(wp), DIMENSION ( jpnnewflo+1 )  :: zgifl, zgjfl,  zgkfl 
    5557      !!--------------------------------------------------------------------- 
    5658       
     
    6163      IF(lwp) WRITE(numout,*) '           jpnfl = ',jpnfl 
    6264       
    63       IF(ln_rstarfl) THEN 
     65      IF(ln_rstflo) THEN 
    6466         IF(lwp) WRITE(numout,*) '        float restart file read' 
    6567          
     
    7072 
    7173         ! read of the restart file 
    72          READ(inum) ( tpifl  (jfl), jfl=1, jpnrstarfl),   &  
    73                         ( tpjfl  (jfl), jfl=1, jpnrstarfl),   & 
    74                         ( tpkfl  (jfl), jfl=1, jpnrstarfl),   & 
    75                         ( nisobfl(jfl), jfl=1, jpnrstarfl),   & 
    76                         ( ngrpfl (jfl), jfl=1, jpnrstarfl)     
     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)     
    7779         CLOSE(inum) 
    7880 
    7981         ! if we want a  surface drift  ( like PROVOR floats ) 
    8082         IF( ln_argo ) THEN 
    81             DO jfl = 1, jpnrstarfl 
     83            DO jfl = 1, jpnrstflo 
    8284               nisobfl(jfl) = 0 
    8385            END DO 
     
    8789          
    8890         ! It is possible to add new floats.           
    89          IF(lwp) WRITE(numout,*)' flo_dom:jpnfl jpnrstarfl ',jpnfl,jpnrstarfl 
    90          IF( jpnfl > jpnrstarfl ) THEN 
     91         IF(lwp) WRITE(numout,*)' flo_dom:jpnfl jpnrstflo ',jpnfl,jpnrstflo 
     92         IF( jpnfl > jpnrstflo ) THEN 
    9193            ! open the init file  
    9294            clname='init_float' 
    9395            OPEN(inum,FILE=clname,FORM='FORMATTED') 
    94             DO jfl = jpnrstarfl+1, jpnfl 
     96            DO jfl = jpnrstflo+1, jpnfl 
    9597               READ(inum,*) flxx(jfl),flyy(jfl),flzz(jfl), nisobfl(jfl),ngrpfl(jfl),jfl1 
    9698            END DO 
     
    99101             
    100102            ! Test to find the grid point coordonate with the geographical position             
    101             DO jfl = jpnrstarfl+1, jpnfl 
     103            DO jfl = jpnrstflo+1, jpnfl 
    102104               ihtest(jfl) = 0 
    103105               ivtest(jfl) = 0 
    104106               ikmfl(jfl) = 0 
    105 # if defined key_mpp 
     107# if   defined key_mpp_mpi   ||   defined key_mpp_shmem 
    106108               DO ji = MAX(nldi,2), nlei 
    107109                  DO jj = MAX(nldj,2), nlej 
     
    140142             
    141143            ! A zero in the sum of the arrays "ihtest" and "ivtest"              
    142 # if defined key_mpp 
    143             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) 
    145147# endif  
    146             DO jfl = jpnrstarfl+1, jpnfl 
     148            DO jfl = jpnrstflo+1, jpnfl 
    147149               IF( (ihtest(jfl) > 1 ) .OR. ( ivtest(jfl) > 1) ) THEN 
    148150                  IF(lwp) WRITE(numout,*) 'THE FLOAT',jfl,' IS NOT IN ONLY ONE MESH' 
     
    156158             
    157159            ! We compute the distance between the float and the face of the mesh             
    158             DO jfl = jpnrstarfl+1, jpnfl                
     160            DO jfl = jpnrstflo+1, jpnfl                
    159161               ! Made only if the float is in the domain of the processor               
    160162               IF( (iimfl(jfl) >= 0) .AND. (ijmfl(jfl) >= 0) ) THEN 
     
    182184                  ! Translation of this distances (in meter) in indexes 
    183185                   
    184                   zgifl(jfl-jpnrstarfl)= (iimfl(jfl)-0.5) + zdxab/e1u(iimfl(jfl)-1,ijmfl(jfl)) + (mig(1)-jpizoom) 
    185                   zgjfl(jfl-jpnrstarfl)= (ijmfl(jfl)-0.5) + zdyad/e2v(iimfl(jfl),ijmfl(jfl)-1) + (mjg(1)-jpjzoom) 
    186                   zgkfl(jfl-jpnrstarfl) = (( 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))  & 
    187189                                        / (  fsdepw(ji,jj,ikmfl(jfl)+1) - fsdepw(ji,jj,ikmfl(jfl) ) )   & 
    188190                                        + (( flzz(jfl)-fsdepw(ji,jj,ikmfl(jfl)) ) *(ikmfl(jfl)+1))   & 
    189191                                        / (  fsdepw(ji,jj,ikmfl(jfl)+1) - fsdepw(ji,jj,ikmfl(jfl)) )  
    190192               ELSE 
    191                   zgifl(jfl-jpnrstarfl) = 0. 
    192                   zgjfl(jfl-jpnrstarfl) = 0. 
    193                   zgkfl(jfl-jpnrstarfl) = 0. 
     193                  zgifl(jfl-jpnrstflo) = 0. 
     194                  zgjfl(jfl-jpnrstflo) = 0. 
     195                  zgkfl(jfl-jpnrstflo) = 0. 
    194196               ENDIF 
    195197            END DO 
    196198             
    197199            ! 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 
    206207            
    207             DO jfl = jpnrstarfl+1, jpnfl 
    208                tpifl(jfl) = zgifl(jfl-jpnrstarfl) 
    209                tpjfl(jfl) = zgjfl(jfl-jpnrstarfl) 
    210                tpkfl(jfl) = zgkfl(jfl-jpnrstarfl) 
     208            DO jfl = jpnrstflo+1, jpnfl 
     209               tpifl(jfl) = zgifl(jfl-jpnrstflo) 
     210               tpjfl(jfl) = zgjfl(jfl-jpnrstflo) 
     211               tpkfl(jfl) = zgkfl(jfl-jpnrstflo) 
    211212            END DO 
    212213         ENDIF 
     
    234235            ivtest(jfl) = 0 
    235236            ikmfl(jfl) = 0 
    236 # if defined key_mpp 
     237# if   defined key_mpp_mpi   ||   defined key_mpp_shmem 
    237238            DO ji = MAX(nldi,2), nlei 
    238239               DO jj = MAX(nldj,2), nlej 
     
    271272          
    272273         ! 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) 
    277276 
    278277         DO jfl = 1, jpnfl 
     
    327326          
    328327         ! 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 ) 
    335332      ENDIF 
    336333             
    337334      ! Print the initial positions of the floats 
    338       IF( .NOT. ln_rstarfl ) THEN  
     335      IF( .NOT. ln_rstflo ) THEN  
    339336         ! WARNING : initial position not in the sea          
    340337         DO jfl = 1, jpnfl 
Note: See TracChangeset for help on using the changeset viewer.