Changeset 1880


Ignore:
Timestamp:
2010-05-21T09:39:46+02:00 (11 years ago)
Author:
aclsce
Message:

Put in CMIP5_IPSL branch bug fixes for diaptr code, see ticket:#361

Location:
branches/CMIP5_IPSL/NEMO/OPA_SRC
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/CMIP5_IPSL/NEMO/OPA_SRC/DIA/diaptr.F90

    r1846 r1880  
    362362#endif 
    363363 
     364            ! Transports 
     365            ! T times V on T points (include bolus velocities) 
     366#if defined key_diaeiv  
     367            DO jj = 2, jpj 
     368               DO ji = 1, jpi 
     369                  vt(ji,jj,:) = tn(ji,jj,:) * ( vn(ji,jj,:) + vn(ji,jj-1,:) + u_eiv(ji,jj,:) + u_eiv(ji,jj-1,:) )*0.5 
     370                  vs(ji,jj,:) = sn(ji,jj,:) * ( vn(ji,jj,:) + vn(ji,jj-1,:) + v_eiv(ji,jj,:) + v_eiv(ji,jj-1,:) )*0.5 
     371               END DO 
     372            END DO 
     373#else 
     374            DO jj = 2, jpj 
     375               DO ji = 1, jpi 
     376                  vt(ji,jj,:) = tn(ji,jj,:) * ( vn(ji,jj,:) + vn(ji,jj-1,:) )*0.5 
     377                  vs(ji,jj,:) = sn(ji,jj,:) * ( vn(ji,jj,:) + vn(ji,jj-1,:) )*0.5 
     378               END DO 
     379            END DO 
     380#endif  
     381            CALL lbc_lnk( vs, 'V', -1. )   ;   CALL lbc_lnk( vt, 'V', -1. ) 
     382 
     383            ht_glo(:) = SUM( ptr_vjk( vt(:,:,:)), 2 ) 
     384            st_glo(:) = SUM( ptr_vjk( vs(:,:,:)), 2 ) 
     385 
     386            IF ( ln_subbas ) THEN  
     387               ht_atl(:) = SUM( ptr_vjk( vt (:,:,:), abasin(:,:)*sbasin(:,:)), 2 ) 
     388               ht_pac(:) = SUM( ptr_vjk( vt (:,:,:), pbasin(:,:)*sbasin(:,:)), 2 ) 
     389               ht_ind(:) = SUM( ptr_vjk( vt (:,:,:), ibasin(:,:)*sbasin(:,:)), 2 ) 
     390               ht_ipc(:) = SUM( ptr_vjk( vt (:,:,:), dbasin(:,:)*sbasin(:,:)), 2 ) 
     391               st_atl(:) = SUM( ptr_vjk( vs (:,:,:), abasin(:,:)*sbasin(:,:)), 2 ) 
     392               st_pac(:) = SUM( ptr_vjk( vs (:,:,:), pbasin(:,:)*sbasin(:,:)), 2 ) 
     393               st_ind(:) = SUM( ptr_vjk( vs (:,:,:), ibasin(:,:)*sbasin(:,:)), 2 ) 
     394               st_ipc(:) = SUM( ptr_vjk( vs (:,:,:), dbasin(:,:)*sbasin(:,:)), 2 ) 
     395            ENDIF 
     396 
     397            ! poleward tracer transports:  
     398            ! overturning components: 
     399            IF ( ln_ptrcomp ) THEN  
     400               pht_ove_glo(:) = SUM( v_msf_glo(:,:) * tn_jk_glo(:,:), 2 )   ! SUM over jk 
     401               pst_ove_glo(:) = SUM( v_msf_glo(:,:) * sn_jk_glo(:,:), 2 )   
     402               IF ( ln_subbas ) THEN  
     403                  pht_ove_atl(:) = SUM( v_msf_atl(:,:) * tn_jk_atl(:,:), 2 )   ! SUM over jk 
     404                  pst_ove_atl(:) = SUM( v_msf_atl(:,:) * sn_jk_atl(:,:), 2 )   
     405                  pht_ove_pac(:) = SUM( v_msf_pac(:,:) * tn_jk_pac(:,:), 2 )   ! SUM over jk 
     406                  pst_ove_pac(:) = SUM( v_msf_pac(:,:) * sn_jk_pac(:,:), 2 )   
     407                  pht_ove_ind(:) = SUM( v_msf_ind(:,:) * tn_jk_ind(:,:), 2 )   ! SUM over jk 
     408                  pst_ove_ind(:) = SUM( v_msf_ind(:,:) * sn_jk_ind(:,:), 2 )   
     409                  pht_ove_ipc(:) = SUM( v_msf_ipc(:,:) * tn_jk_ipc(:,:), 2 )   ! SUM over jk 
     410                  pst_ove_ipc(:) = SUM( v_msf_ipc(:,:) * sn_jk_ipc(:,:), 2 )   
     411               END IF 
     412            END IF 
     413 
     414            ! Bolus component 
     415#if defined key_diaeiv 
     416            pht_eiv_glo(:) = SUM( v_msf_eiv_glo(:,:) * tn_jk_glo(:,:), 2 )   ! SUM over jk 
     417            pst_eiv_glo(:) = SUM( v_msf_eiv_glo(:,:) * sn_jk_glo(:,:), 2 )   ! SUM over jk 
     418            IF ( ln_subbas ) THEN  
     419               pht_eiv_atl(:) = SUM( v_msf_eiv_glo(:,:) * tn_jk_atl(:,:), 2 )   ! SUM over jk 
     420               pst_eiv_atl(:) = SUM( v_msf_eiv_glo(:,:) * sn_jk_atl(:,:), 2 )   ! SUM over jk 
     421               pht_eiv_pac(:) = SUM( v_msf_eiv_pac(:,:) * tn_jk_pac(:,:), 2 )   ! SUM over jk 
     422               pst_eiv_pac(:) = SUM( v_msf_eiv_pac(:,:) * sn_jk_pac(:,:), 2 )   ! SUM over jk 
     423               pht_eiv_ind(:) = SUM( v_msf_eiv_ind(:,:) * tn_jk_ind(:,:), 2 )   ! SUM over jk 
     424               pst_eiv_ind(:) = SUM( v_msf_eiv_ind(:,:) * sn_jk_ind(:,:), 2 )   ! SUM over jk 
     425               pht_eiv_ipc(:) = SUM( v_msf_eiv_ipc(:,:) * tn_jk_ipc(:,:), 2 )   ! SUM over jk 
     426               pst_eiv_ipc(:) = SUM( v_msf_eiv_ipc(:,:) * sn_jk_ipc(:,:), 2 )   ! SUM over jk 
     427            ENDIF 
     428#endif 
     429 
     430            ! conversion in PW and G g 
     431            zpwatt = zpwatt * rau0 * rcp 
     432            pht_adv(:) = pht_adv(:) * zpwatt   
     433            pht_ldf(:) = pht_ldf(:) * zpwatt 
     434            pst_adv(:) = pst_adv(:) * zggram 
     435            pst_ldf(:) = pst_ldf(:) * zggram 
     436            IF ( ln_ptrcomp ) THEN  
     437               pht_ove_glo(:) = pht_ove_glo(:) * zpwatt 
     438               pst_ove_glo(:) = pst_ove_glo(:) * zggram 
     439            END IF 
     440#if defined key_diaeiv 
     441            pht_eiv_glo(:) = pht_eiv_glo(:) * zpwatt 
     442            pst_eiv_glo(:) = pst_eiv_glo(:) * zggram 
     443#endif 
     444            IF( ln_subbas ) THEN 
     445               ht_atl(:) = ht_atl(:) * zpwatt 
     446               ht_pac(:) = ht_pac(:) * zpwatt 
     447               ht_ind(:) = ht_ind(:) * zpwatt 
     448               ht_ipc(:) = ht_ipc(:) * zpwatt 
     449               st_atl(:) = st_atl(:) * zggram  
     450               st_pac(:) = st_pac(:) * zggram 
     451               st_ind(:) = st_ind(:) * zggram 
     452               st_ipc(:) = st_ipc(:) * zggram 
     453            ENDIF 
     454 
    364455            ! "Meridional" Stream-Function 
    365456            DO jk = 2,jpk  
     
    394485               v_msf_ind(:,:) = v_msf_ind(:,:) * zsverdrup 
    395486               v_msf_ipc(:,:) = v_msf_ipc(:,:) * zsverdrup 
    396             ENDIF 
    397  
    398             ! Transports 
    399             ! T times V on T points (include bolus velocities) 
    400 #if defined key_diaeiv  
    401             DO jj = 2, jpj 
    402                DO ji = 1, jpi 
    403                   vt(ji,jj,:) = tn(ji,jj,:) * ( vn(ji,jj,:) + vn(ji,jj-1,:) + u_eiv(ji,jj,:) + u_eiv(ji,jj-1,:) )*0.5 
    404                   vs(ji,jj,:) = sn(ji,jj,:) * ( vn(ji,jj,:) + vn(ji,jj-1,:) + v_eiv(ji,jj,:) + v_eiv(ji,jj-1,:) )*0.5 
    405                END DO 
    406             END DO 
    407 #else 
    408             DO jj = 2, jpj 
    409                DO ji = 1, jpi 
    410                   vt(ji,jj,:) = tn(ji,jj,:) * ( vn(ji,jj,:) + vn(ji,jj-1,:) )*0.5 
    411                   vs(ji,jj,:) = sn(ji,jj,:) * ( vn(ji,jj,:) + vn(ji,jj-1,:) )*0.5 
    412                END DO 
    413             END DO 
    414 #endif  
    415             CALL lbc_lnk( vs, 'V', -1. )   ;   CALL lbc_lnk( vt, 'V', -1. ) 
    416  
    417             ht_glo(:) = SUM( ptr_vjk( vt(:,:,:)), 2 ) 
    418             st_glo(:) = SUM( ptr_vjk( vs(:,:,:)), 2 ) 
    419  
    420             IF ( ln_subbas ) THEN  
    421                ht_atl(:) = SUM( ptr_vjk( vt (:,:,:), abasin(:,:)*sbasin(:,:)), 2 ) 
    422                ht_pac(:) = SUM( ptr_vjk( vt (:,:,:), pbasin(:,:)*sbasin(:,:)), 2 ) 
    423                ht_ind(:) = SUM( ptr_vjk( vt (:,:,:), ibasin(:,:)*sbasin(:,:)), 2 ) 
    424                ht_ipc(:) = SUM( ptr_vjk( vt (:,:,:), dbasin(:,:)*sbasin(:,:)), 2 ) 
    425                st_atl(:) = SUM( ptr_vjk( vs (:,:,:), abasin(:,:)*sbasin(:,:)), 2 ) 
    426                st_pac(:) = SUM( ptr_vjk( vs (:,:,:), pbasin(:,:)*sbasin(:,:)), 2 ) 
    427                st_ind(:) = SUM( ptr_vjk( vs (:,:,:), ibasin(:,:)*sbasin(:,:)), 2 ) 
    428                st_ipc(:) = SUM( ptr_vjk( vs (:,:,:), dbasin(:,:)*sbasin(:,:)), 2 ) 
    429             ENDIF 
    430  
    431             ! poleward tracer transports:  
    432             ! overturning components: 
    433             IF ( ln_ptrcomp ) THEN  
    434                pht_ove_glo(:) = SUM( v_msf_glo(:,:) * tn_jk_glo(:,:), 2 )   ! SUM over jk 
    435                pst_ove_glo(:) = SUM( v_msf_glo(:,:) * sn_jk_glo(:,:), 2 )   
    436                IF ( ln_subbas ) THEN  
    437                   pht_ove_atl(:) = SUM( v_msf_atl(:,:) * tn_jk_atl(:,:), 2 )   ! SUM over jk 
    438                   pst_ove_atl(:) = SUM( v_msf_atl(:,:) * sn_jk_atl(:,:), 2 )   
    439                   pht_ove_pac(:) = SUM( v_msf_pac(:,:) * tn_jk_pac(:,:), 2 )   ! SUM over jk 
    440                   pst_ove_pac(:) = SUM( v_msf_pac(:,:) * sn_jk_pac(:,:), 2 )   
    441                   pht_ove_ind(:) = SUM( v_msf_ind(:,:) * tn_jk_ind(:,:), 2 )   ! SUM over jk 
    442                   pst_ove_ind(:) = SUM( v_msf_ind(:,:) * sn_jk_ind(:,:), 2 )   
    443                   pht_ove_ipc(:) = SUM( v_msf_ipc(:,:) * tn_jk_ipc(:,:), 2 )   ! SUM over jk 
    444                   pst_ove_ipc(:) = SUM( v_msf_ipc(:,:) * sn_jk_ipc(:,:), 2 )   
    445                END IF 
    446             END IF 
    447  
    448             ! Bolus component 
    449 #if defined key_diaeiv 
    450             pht_eiv_glo(:) = SUM( v_msf_eiv_glo(:,:) * tn_jk_glo(:,:), 2 )   ! SUM over jk 
    451             pst_eiv_glo(:) = SUM( v_msf_eiv_glo(:,:) * sn_jk_glo(:,:), 2 )   ! SUM over jk 
    452             IF ( ln_subbas ) THEN  
    453                pht_eiv_atl(:) = SUM( v_msf_eiv_glo(:,:) * tn_jk_atl(:,:), 2 )   ! SUM over jk 
    454                pst_eiv_atl(:) = SUM( v_msf_eiv_glo(:,:) * sn_jk_atl(:,:), 2 )   ! SUM over jk 
    455                pht_eiv_pac(:) = SUM( v_msf_eiv_pac(:,:) * tn_jk_pac(:,:), 2 )   ! SUM over jk 
    456                pst_eiv_pac(:) = SUM( v_msf_eiv_pac(:,:) * sn_jk_pac(:,:), 2 )   ! SUM over jk 
    457                pht_eiv_ind(:) = SUM( v_msf_eiv_ind(:,:) * tn_jk_ind(:,:), 2 )   ! SUM over jk 
    458                pst_eiv_ind(:) = SUM( v_msf_eiv_ind(:,:) * sn_jk_ind(:,:), 2 )   ! SUM over jk 
    459                pht_eiv_ipc(:) = SUM( v_msf_eiv_ipc(:,:) * tn_jk_ipc(:,:), 2 )   ! SUM over jk 
    460                pst_eiv_ipc(:) = SUM( v_msf_eiv_ipc(:,:) * sn_jk_ipc(:,:), 2 )   ! SUM over jk 
    461             ENDIF 
    462 #endif 
    463  
    464             ! conversion in PW and G g 
    465             zpwatt = zpwatt * rau0 * rcp 
    466             pht_adv(:) = pht_adv(:) * zpwatt   
    467             pht_ldf(:) = pht_ldf(:) * zpwatt 
    468             pst_adv(:) = pst_adv(:) * zggram 
    469             pst_ldf(:) = pst_ldf(:) * zggram 
    470             IF ( ln_ptrcomp ) THEN  
    471                pht_ove_glo(:) = pht_ove_glo(:) * zpwatt 
    472                pst_ove_glo(:) = pst_ove_glo(:) * zggram 
    473             END IF 
    474 #if defined key_diaeiv 
    475             pht_eiv_glo(:) = pht_eiv_glo(:) * zpwatt 
    476             pst_eiv_glo(:) = pst_eiv_glo(:) * zggram 
    477 #endif 
    478             IF( ln_subbas ) THEN 
    479                ht_atl(:) = ht_atl(:) * zpwatt 
    480                ht_pac(:) = ht_pac(:) * zpwatt 
    481                ht_ind(:) = ht_ind(:) * zpwatt 
    482                ht_ipc(:) = ht_ipc(:) * zpwatt 
    483                st_atl(:) = st_atl(:) * zggram  
    484                st_pac(:) = st_pac(:) * zggram 
    485                st_ind(:) = st_ind(:) * zggram 
    486                st_ipc(:) = st_ipc(:) * zggram 
    487487            ENDIF 
    488488         ENDIF 
  • branches/CMIP5_IPSL/NEMO/OPA_SRC/TRA/traadv_tvd.F90

    r1528 r1880  
    179179      END DO 
    180180 
     181      ! "zonal" mean advective heat and salt transport 
     182      IF( ln_diaptr .AND. ( MOD( kt, nf_ptr ) == 0 ) ) THEN 
     183         pht_adv(:) = ptr_vj( ztv(:,:,:) ) 
     184         pst_adv(:) = ptr_vj( zsv(:,:,:) ) 
     185      ENDIF 
    181186 
    182187      ! Save the intermediate i / j / k advective trends for diagnostics 
     
    366371      ! "zonal" mean advective heat and salt transport 
    367372      IF( ln_diaptr .AND. ( MOD( kt, nf_ptr ) == 0 ) ) THEN 
    368          pht_adv(:) = ptr_vj( ztv(:,:,:) ) 
    369          pst_adv(:) = ptr_vj( zsv(:,:,:) ) 
     373         pht_adv(:) = ptr_vj( ztv(:,:,:) ) + pht_adv(:) 
     374         pst_adv(:) = ptr_vj( zsv(:,:,:) ) + pst_adv(:) 
    370375      ENDIF 
    371376      ! 
Note: See TracChangeset for help on using the changeset viewer.