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 2907 for branches/2011/dev_r2802_MERCATOR9_floats/NEMOGCM/NEMO/OPA_SRC/FLO/flodom.F90 – NEMO

Ignore:
Timestamp:
2011-10-12T19:08:14+02:00 (13 years ago)
Author:
cbricaud
Message:

modifications after review

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2011/dev_r2802_MERCATOR9_floats/NEMOGCM/NEMO/OPA_SRC/FLO/flodom.F90

    r2844 r2907  
    2727   PRIVATE 
    2828 
    29    PUBLIC   flo_dom    ! routine called by floats.F90 
     29   PUBLIC   flo_dom         ! routine called by floats.F90 
     30   PUBLIC   flo_dom_alloc   ! Routine called in floats.F90 
    3031 
    3132   CHARACTER (len=21) ::  clname1 = 'init_float'              ! floats initialisation filename 
    3233   CHARACTER (len=21) ::  clname2 = 'init_float_ariane'       ! ariane floats initialisation filename 
     34 
     35 
     36   INTEGER , ALLOCATABLE, DIMENSION(:) ::   iimfl, ijmfl, ikmfl       ! index mesh of floats 
     37   INTEGER , ALLOCATABLE, DIMENSION(:) ::   idomfl, ivtest, ihtest    !   -      
     38   REAL(wp), ALLOCATABLE, DIMENSION(:) ::   zgifl, zgjfl,  zgkfl      ! distances in indexes 
    3339 
    3440   !! * Substitutions 
     
    8995 
    9096            IF( ln_ariane )THEN  !Add new floats with ariane convention 
    91                 CALL add_new_ariane_floats(jpnrstflo+1,jpnfl)  
     97                CALL flo_add_new_ariane_floats(jpnrstflo+1,jpnfl)  
    9298            ELSE                 !Add new floats with long/lat convention 
    93                 CALL add_new_floats(jpnrstflo+1,jpnfl) 
     99                CALL flo_add_new_floats(jpnrstflo+1,jpnfl) 
    94100            ENDIF 
    95101         ENDIF 
     
    101107 
    102108         IF( ln_ariane )THEN       !Add new floats with ariane convention 
    103             CALL add_new_ariane_floats(1,jpnfl) 
     109            CALL flo_add_new_ariane_floats(1,jpnfl) 
    104110         ELSE                      !Add new floats with long/lat convention 
    105             CALL add_new_floats(1,jpnfl) 
     111            CALL flo_add_new_floats(1,jpnfl) 
    106112         ENDIF 
    107113 
     
    110116   END SUBROUTINE flo_dom 
    111117 
    112    SUBROUTINE add_new_floats(kfl_start, kfl_end) 
     118   SUBROUTINE flo_add_new_floats(kfl_start, kfl_end) 
    113119      !! ------------------------------------------------------------- 
    114120      !!                 ***  SUBROUTINE add_new_arianefloats  *** 
     
    134140      LOGICAL           :: llinmesh 
    135141      CHARACTER(len=80) :: cltmp 
    136  
    137       INTEGER , DIMENSION(jpnfl) ::   iimfl, ijmfl, ikmfl       ! index mesh of floats 
    138       INTEGER , DIMENSION(jpnfl) ::   idomfl, ivtest, ihtest    !   -      
    139       REAL(wp), DIMENSION(jpnfl) ::   zgifl, zgjfl,  zgkfl 
    140142      !!--------------------------------------------------------------------- 
    141143      ifl = kfl_end-kfl_start+1 
     
    164166# endif                      
    165167               ! For each float we find the indexes of the mesh                       
    166                CALL findmesh(glamf(ji-1,jj-1),gphif(ji-1,jj-1),   & 
    167                              glamf(ji-1,jj  ),gphif(ji-1,jj  ),   & 
    168                              glamf(ji  ,jj  ),gphif(ji  ,jj  ),   & 
    169                              glamf(ji  ,jj-1),gphif(ji  ,jj-1),   & 
    170                              flxx(jfl)       ,flyy(jfl)       ,   & 
    171                              glamt(ji  ,jj  ),gphit(ji  ,jj  ), llinmesh) 
     168               CALL flo_findmesh(glamf(ji-1,jj-1),gphif(ji-1,jj-1),   & 
     169                                 glamf(ji-1,jj  ),gphif(ji-1,jj  ),   & 
     170                                 glamf(ji  ,jj  ),gphif(ji  ,jj  ),   & 
     171                                 glamf(ji  ,jj-1),gphif(ji  ,jj-1),   & 
     172                                 flxx(jfl)       ,flyy(jfl)       ,   & 
     173                                 glamt(ji  ,jj  ),gphit(ji  ,jj  ), llinmesh) 
    172174               IF( llinmesh )THEN 
    173175                  iimfl(jfl) = ji 
     
    231233            !        A--------|-----D 
    232234            ! 
    233             zdxab = dstnce( flxx(jfl), flyy(jfl), glamf(iimfl(jfl)-1,ijmfl(jfl)-1), flyy(jfl) ) 
    234             zdyad = dstnce( flxx(jfl), flyy(jfl), flxx(jfl), gphif(iimfl(jfl)-1,ijmfl(jfl)-1) ) 
     235            zdxab = flo_dstnce( flxx(jfl), flyy(jfl), glamf(iimfl(jfl)-1,ijmfl(jfl)-1), flyy(jfl) ) 
     236            zdyad = flo_dstnce( flxx(jfl), flyy(jfl), flxx(jfl), gphif(iimfl(jfl)-1,ijmfl(jfl)-1) ) 
    235237 
    236238            ! Translation of this distances (in meter) in indexes 
     
    277279      ENDIF 
    278280 
    279    END SUBROUTINE add_new_floats 
    280  
    281    SUBROUTINE add_new_ariane_floats(kfl_start, kfl_end) 
     281   END SUBROUTINE flo_add_new_floats 
     282 
     283   SUBROUTINE flo_add_new_ariane_floats(kfl_start, kfl_end) 
    282284      !! ------------------------------------------------------------- 
    283285      !!                 ***  SUBROUTINE add_new_arianefloats  *** 
     
    349351 
    350352 
    351    END SUBROUTINE add_new_ariane_floats 
    352  
    353  
    354    SUBROUTINE findmesh( pax, pay, pbx, pby,   & 
    355                         pcx, pcy, pdx, pdy,   & 
    356                         px  ,py  ,ptx, pty, ldinmesh ) 
     353   END SUBROUTINE flo_add_new_ariane_floats 
     354 
     355 
     356   SUBROUTINE flo_findmesh( pax, pay, pbx, pby,   & 
     357                            pcx, pcy, pdx, pdy,   & 
     358                            px  ,py  ,ptx, pty, ldinmesh ) 
    357359      !! ------------------------------------------------------------- 
    358360      !!                ***  ROUTINE findmesh  *** 
     
    410412      ENDIF 
    411413      ! 
    412    END SUBROUTINE findmesh 
    413  
    414  
    415    FUNCTION dstnce( pla1, phi1, pla2, phi2 ) 
     414   END SUBROUTINE flo_findmesh 
     415 
     416 
     417   FUNCTION flo_dstnce( pla1, phi1, pla2, phi2 ) 
    416418      !! ------------------------------------------------------------- 
    417419      !!                 ***  Function dstnce  *** 
     
    423425      REAL(wp), INTENT(in) ::   pla1, phi1, pla2, phi2   ! ??? 
    424426      !! 
    425       REAL(wp) ::   dly1, dly2, dlx1, dlx2, dlx, dls, dld, dpi 
    426       REAL(wp) ::   dstnce 
     427      REAL(wp) :: dly1, dly2, dlx1, dlx2, dlx, dls, dld, dpi 
     428      REAL(wp) :: flo_dstnce 
    427429      !!--------------------------------------------------------------------- 
    428430      ! 
    429       dpi  = 2.* ASIN(1.) 
    430       dls  = dpi / 180. 
     431      dpi  = 2._wp * ASIN(1._wp) 
     432      dls  = dpi / 180._wp 
    431433      dly1 = phi1 * dls 
    432434      dly2 = phi2 * dls 
     
    436438      dlx = SIN(dly1) * SIN(dly2) + COS(dly1) * COS(dly2) * COS(dlx2-dlx1) 
    437439      ! 
    438       IF( ABS(dlx) > 1.0 ) dlx = 1.0 
    439       ! 
    440       dld = ATAN(DSQRT( 1.d0 * ( 1.-dlx )/( 1.+dlx ) )) * 222.24 / dls 
    441       dstnce = dld * 1000. 
    442       ! 
    443    END FUNCTION dstnce 
    444  
    445  
    446 #  else 
     440      IF( ABS(dlx) > 1.0_wp ) dlx = 1.0_wp 
     441      ! 
     442      dld = ATAN(DSQRT( 1._wp * ( 1._wp-dlx )/( 1._wp+dlx ) )) * 222.24_wp / dls 
     443      flo_dstnce = dld * 1000._wp 
     444      ! 
     445   END FUNCTION flo_dstnce 
     446 
     447   INTEGER FUNCTION flo_dom_alloc() 
     448      !!---------------------------------------------------------------------- 
     449      !!                 ***  FUNCTION flo_dom_alloc  *** 
     450      !!---------------------------------------------------------------------- 
     451 
     452      ALLOCATE( iimfl(jpnfl) , ijmfl(jpnfl) , ikmfl(jpnfl) ,                          &   
     453                idomfl(jpnfl), ivtest(jpnfl), ihtest(jpnfl),                 & 
     454                zgifl(jpnfl) , zgjfl(jpnfl) , zgkfl(jpnfl)   , STAT=flo_dom_alloc ) 
     455      ! 
     456      IF( lk_mpp             )   CALL mpp_sum ( flo_dom_alloc ) 
     457      IF( flo_dom_alloc /= 0 )   CALL ctl_warn('flo_dom_alloc: failed to allocate arrays') 
     458   END FUNCTION flo_dom_alloc 
     459 
     460 
     461#else 
    447462   !!---------------------------------------------------------------------- 
    448463   !!   Default option                                         Empty module 
Note: See TracChangeset for help on using the changeset viewer.