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 1226 for trunk/NEMO/OPA_SRC/geo2ocean.F90 – NEMO

Ignore:
Timestamp:
2008-11-27T18:41:45+01:00 (15 years ago)
Author:
smasson
Message:

bugfix of the coupling interface (commited during changeset:1218), see ticket:155

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/OPA_SRC/geo2ocean.F90

    r1218 r1226  
    3939   !!---------------------------------------------------------------------- 
    4040   !! NEMO/OPA 3.0 , LOCEAN-IPSL (2008)  
    41    !! $Id:$  
     41   !! $Id$  
    4242   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
    4343   !!---------------------------------------------------------------------- 
     
    311311 
    312312      ! lateral boundary cond.: T-, U-, V-, F-pts, sgn 
    313       CALL lbc_lnk ( gcost, 'T', 1. )   ;   CALL lbc_lnk( gsint, 'T', -1. ) 
    314       CALL lbc_lnk ( gcosu, 'U', 1. )   ;   CALL lbc_lnk( gsinu, 'U', -1. ) 
    315       CALL lbc_lnk ( gcosv, 'V', 1. )   ;   CALL lbc_lnk( gsinv, 'V', -1. ) 
    316       CALL lbc_lnk ( gcosf, 'F', 1. )   ;   CALL lbc_lnk( gsinf, 'F', -1. ) 
     313      CALL lbc_lnk( gcost, 'T', 1. )   ;   CALL lbc_lnk( gsint, 'T', -1. ) 
     314      CALL lbc_lnk( gcosu, 'U', 1. )   ;   CALL lbc_lnk( gsinu, 'U', -1. ) 
     315      CALL lbc_lnk( gcosv, 'V', 1. )   ;   CALL lbc_lnk( gsinv, 'V', -1. ) 
     316      CALL lbc_lnk( gcosf, 'F', 1. )   ;   CALL lbc_lnk( gsinf, 'F', -1. ) 
    317317 
    318318   END SUBROUTINE angle 
     
    350350 
    351351      SELECT CASE( cgrid) 
    352          CASE ( 't' )    
     352         CASE ( 'T' )    
    353353            ig = 1 
    354354            IF( .NOT. linit(ig) ) THEN  
    355                zsinlon (:,:,ig) = SIN (rad * glamt) 
    356                zcoslon (:,:,ig) = COS (rad * glamt) 
    357                zsinlat (:,:,ig) = SIN (rad * gphit) 
    358                zcoslat (:,:,ig) = COS (rad * gphit) 
    359                linit (ig) = .TRUE. 
    360             ENDIF 
    361          CASE ( 'u' )    
     355               zsinlon(:,:,ig) = SIN( rad * glamt(:,:) ) 
     356               zcoslon(:,:,ig) = COS( rad * glamt(:,:) ) 
     357               zsinlat(:,:,ig) = SIN( rad * gphit(:,:) ) 
     358               zcoslat(:,:,ig) = COS( rad * gphit(:,:) ) 
     359               linit(ig) = .TRUE. 
     360            ENDIF 
     361         CASE ( 'U' )    
    362362            ig = 2 
    363363            IF( .NOT. linit(ig) ) THEN  
    364                zsinlon (:,:,ig) = SIN (rad * glamu) 
    365                zcoslon (:,:,ig) = COS (rad * glamu) 
    366                zsinlat (:,:,ig) = SIN (rad * gphiu) 
    367                zcoslat (:,:,ig) = COS (rad * gphiu) 
    368                linit (ig) = .TRUE. 
    369             ENDIF 
    370          CASE ( 'v' )    
     364               zsinlon(:,:,ig) = SIN( rad * glamu(:,:) ) 
     365               zcoslon(:,:,ig) = COS( rad * glamu(:,:) ) 
     366               zsinlat(:,:,ig) = SIN( rad * gphiu(:,:) ) 
     367               zcoslat(:,:,ig) = COS( rad * gphiu(:,:) ) 
     368               linit(ig) = .TRUE. 
     369            ENDIF 
     370         CASE ( 'V' )    
    371371            ig = 3 
    372372            IF( .NOT. linit(ig) ) THEN  
    373                zsinlon (:,:,ig) = SIN (rad * glamv) 
    374                zcoslon (:,:,ig) = COS (rad * glamv) 
    375                zsinlat (:,:,ig) = SIN (rad * gphiv) 
    376                zcoslat (:,:,ig) = COS (rad * gphiv) 
    377                linit (ig) = .TRUE. 
    378             ENDIF 
    379          CASE ( 'f' )    
     373               zsinlon(:,:,ig) = SIN( rad * glamv(:,:) ) 
     374               zcoslon(:,:,ig) = COS( rad * glamv(:,:) ) 
     375               zsinlat(:,:,ig) = SIN( rad * gphiv(:,:) ) 
     376               zcoslat(:,:,ig) = COS( rad * gphiv(:,:) ) 
     377               linit(ig) = .TRUE. 
     378            ENDIF 
     379         CASE ( 'F' )    
    380380            ig = 4 
    381381            IF( .NOT. linit(ig) ) THEN  
    382                zsinlon (:,:,ig) = SIN (rad * glamf) 
    383                zcoslon (:,:,ig) = COS (rad * glamf) 
    384                zsinlat (:,:,ig) = SIN (rad * gphif) 
    385                zcoslat (:,:,ig) = COS (rad * gphif) 
    386                linit (ig) = .TRUE. 
     382               zsinlon(:,:,ig) = SIN( rad * glamf(:,:) ) 
     383               zcoslon(:,:,ig) = COS( rad * glamf(:,:) ) 
     384               zsinlat(:,:,ig) = SIN( rad * gphif(:,:) ) 
     385               zcoslat(:,:,ig) = COS( rad * gphif(:,:) ) 
     386               linit(ig) = .TRUE. 
    387387            ENDIF 
    388388         CASE default    
     
    391391      END SELECT 
    392392       
    393       pte = - zsinlon (:,:,ig) * pxx + zcoslon (:,:,ig) * pyy 
    394       ptn = - zcoslon (:,:,ig) * zsinlat (:,:,ig) * pxx    & 
    395             - zsinlon (:,:,ig) * zsinlat (:,:,ig) * pyy    & 
    396             + zcoslat (:,:,ig) * pzz 
    397 !!$   ptv =   zcoslon (:,:,ig) * zcoslat (:,:,ig) * pxx    & 
    398 !!$         + zsinlon (:,:,ig) * zcoslat (:,:,ig) * pyy    & 
    399 !!$         + zsinlat (:,:,ig) * pzz 
     393      pte = - zsinlon(:,:,ig) * pxx + zcoslon(:,:,ig) * pyy 
     394      ptn = - zcoslon(:,:,ig) * zsinlat(:,:,ig) * pxx    & 
     395            - zsinlon(:,:,ig) * zsinlat(:,:,ig) * pyy    & 
     396            + zcoslat(:,:,ig) * pzz 
     397!!$   ptv =   zcoslon(:,:,ig) * zcoslat(:,:,ig) * pxx    & 
     398!!$         + zsinlon(:,:,ig) * zcoslat(:,:,ig) * pyy    & 
     399!!$         + zsinlat(:,:,ig) * pzz 
    400400      ! 
    401401   END SUBROUTINE geo2oce 
    402402 
    403403   SUBROUTINE oce2geo ( pte, ptn, cgrid,     & 
    404                         plon, plat, pxx , pyy , pzz ) 
     404                        pxx , pyy , pzz ) 
    405405      !!---------------------------------------------------------------------- 
    406406      !!                    ***  ROUTINE oce2geo  *** 
     
    415415      REAL(wp), DIMENSION(jpi,jpj), INTENT( IN    ) ::  pte, ptn 
    416416      CHARACTER(len=1)            , INTENT( IN    ) ::  cgrid 
    417       REAL(wp), DIMENSION(jpi,jpj), INTENT( IN    ) ::  plon, plat 
    418417      REAL(wp), DIMENSION(jpi,jpj), INTENT(   OUT ) ::  pxx , pyy , pzz 
    419418      !! 
     
    426425      !!---------------------------------------------------------------------- 
    427426 
    428       WRITE(ctmp1,*) 'oce2geo : Arnaud, au boulot ' 
    429       CALL ctl_stop( ctmp1 ) 
    430  
    431427      SELECT CASE( cgrid) 
    432          CASE ( 't' ) ;; ig = 1 
    433          CASE ( 'u' ) ;; ig = 2 
    434          CASE ( 'v' ) ;; ig = 3 
    435          CASE ( 'f' ) ;; ig = 4 
    436          CASE default 
    437             WRITE(ctmp1,*) 'oce2geo : bad grid argument : ', cgrid 
     428         CASE ( 'T' )    
     429            ig = 1 
     430            IF( .NOT. linit(ig) ) THEN  
     431               zsinlon(:,:,ig) = SIN( rad * glamt(:,:) ) 
     432               zcoslon(:,:,ig) = COS( rad * glamt(:,:) ) 
     433               zsinlat(:,:,ig) = SIN( rad * gphit(:,:) ) 
     434               zcoslat(:,:,ig) = COS( rad * gphit(:,:) ) 
     435               linit(ig) = .TRUE. 
     436            ENDIF 
     437         CASE ( 'U' )    
     438            ig = 2 
     439            IF( .NOT. linit(ig) ) THEN  
     440               zsinlon(:,:,ig) = SIN( rad * glamu(:,:) ) 
     441               zcoslon(:,:,ig) = COS( rad * glamu(:,:) ) 
     442               zsinlat(:,:,ig) = SIN( rad * gphiu(:,:) ) 
     443               zcoslat(:,:,ig) = COS( rad * gphiu(:,:) ) 
     444               linit(ig) = .TRUE. 
     445            ENDIF 
     446         CASE ( 'V' )    
     447            ig = 3 
     448            IF( .NOT. linit(ig) ) THEN  
     449               zsinlon(:,:,ig) = SIN( rad * glamv(:,:) ) 
     450               zcoslon(:,:,ig) = COS( rad * glamv(:,:) ) 
     451               zsinlat(:,:,ig) = SIN( rad * gphiv(:,:) ) 
     452               zcoslat(:,:,ig) = COS( rad * gphiv(:,:) ) 
     453               linit(ig) = .TRUE. 
     454            ENDIF 
     455         CASE ( 'F' )    
     456            ig = 4 
     457            IF( .NOT. linit(ig) ) THEN  
     458               zsinlon(:,:,ig) = SIN( rad * glamf(:,:) ) 
     459               zcoslon(:,:,ig) = COS( rad * glamf(:,:) ) 
     460               zsinlat(:,:,ig) = SIN( rad * gphif(:,:) ) 
     461               zcoslat(:,:,ig) = COS( rad * gphif(:,:) ) 
     462               linit(ig) = .TRUE. 
     463            ENDIF 
     464         CASE default    
     465            WRITE(ctmp1,*) 'geo2oce : bad grid argument : ', cgrid 
    438466            CALL ctl_stop( ctmp1 ) 
    439        END SELECT 
    440        pxx(:,:) = 0. ; pyy(:,:) = 0. ; pzz(:,:) = 0. ! stupid definition to avoid warning message when compiling... 
     467      END SELECT 
     468 
     469       pxx = - zsinlon(:,:,ig) * pte - zcoslon(:,:,ig) * zsinlat(:,:,ig) * ptn  
     470       pyy =   zcoslon(:,:,ig) * pte - zsinlon(:,:,ig) * zsinlat(:,:,ig) * ptn 
     471       pzz =   zcoslat(:,:,ig) * ptn 
     472 
    441473       
    442474   END SUBROUTINE oce2geo 
Note: See TracChangeset for help on using the changeset viewer.