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 4724 for branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OPA_SRC/DIA/diahsb.F90 – NEMO

Ignore:
Timestamp:
2014-07-18T17:32:27+02:00 (10 years ago)
Author:
mathiot
Message:

ISF branch: add comments, fix mpp and restar issues, add test to stop if incompatible options and fix mask issue in sbcice and sbcblk.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OPA_SRC/DIA/diahsb.F90

    r4704 r4724  
    6969      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
    7070      !! 
    71       INTEGER    ::   jk                          ! dummy loop indice 
     71      INTEGER    ::   jk, ji, jj                          ! dummy loop indice 
    7272      REAL(dp)   ::   zdiff_hc    , zdiff_sc      ! heat and salt content variations 
    7373      REAL(dp)   ::   zdiff_hc1   , zdiff_sc1     ! -   -   -   -   -   -   -   -  
     
    7979      REAL(dp)   ::   z_wn_trd_t , z_wn_trd_s   !    -     - 
    8080      REAL(dp)   ::   z_ssh_hc , z_ssh_sc   !    -     - 
     81      REAL(dp), DIMENSION(:,:), POINTER       ::   z2d0, z2d1 
    8182      !!--------------------------------------------------------------------------- 
    8283      IF( nn_timing == 1 )   CALL timing_start('dia_hsb')       
    83  
     84      CALL wrk_alloc( jpi,jpj, z2d0, z2d1 ) 
     85      tsn(:,:,:,1) = tsn(:,:,:,1) * tmask(:,:,:) ; tsb(:,:,:,1) = tsb(:,:,:,1) * tmask(:,:,:) ; 
     86      tsn(:,:,:,2) = tsn(:,:,:,2) * tmask(:,:,:) ; tsb(:,:,:,2) = tsb(:,:,:,2) * tmask(:,:,:) ; 
    8487      ! ------------------------- ! 
    8588      ! 1 - Trends due to forcing ! 
    8689      ! ------------------------- ! 
    87       z_frc_trd_v = r1_rau0 * glob_sum( - ( emp(:,:) - rnf(:,:) + rdivisf * fwfisf(:,:)) * surf(:,:) ) ! volume fluxes 
    88       z_frc_trd_t =           glob_sum( sbc_tsc(:,:,jp_tem) * surf(:,:) )       ! heat fluxes 
    89       z_frc_trd_s =           glob_sum( sbc_tsc(:,:,jp_sal) * surf(:,:) )       ! salt fluxes 
     90      z_frc_trd_v = r1_rau0 * glob_sum( - ( emp(:,:) - rnf(:,:) + rdivisf * fwfisf(:,:) ) * surf(:,:) ) ! volume fluxes 
     91      z_frc_trd_t =           glob_sum( sbc_tsc(:,:,jp_tem) * surf(:,:) )                               ! heat fluxes 
     92      z_frc_trd_s =           glob_sum( sbc_tsc(:,:,jp_sal) * surf(:,:) )                               ! salt fluxes 
    9093      ! Add runoff heat & salt input 
    9194      IF( ln_rnf    )   z_frc_trd_t = z_frc_trd_t + glob_sum( rnf_tsc(:,:,jp_tem) * surf(:,:) ) 
    9295      IF( ln_rnf_sal)   z_frc_trd_s = z_frc_trd_s + glob_sum( rnf_tsc(:,:,jp_sal) * surf(:,:) ) 
     96      ! Add geothermal ice shelf 
     97      IF( nn_isf .GE. 1 )  THEN 
     98                        z_frc_trd_t = z_frc_trd_t +                      glob_sum( ( risf_tsc(:,:,jp_tem) - rdivisf * fwfisf(:,:) * -1.9 * r1_rau0 ) * surf(:,:) ) 
     99                        z_frc_trd_s = z_frc_trd_s + (1.0_wp - rdivisf) * glob_sum( risf_tsc(:,:,jp_sal) * surf(:,:) ) 
     100      ENDIF 
    93101 
    94102      ! Add penetrative solar radiation 
     
    98106      ! 
    99107      IF( .NOT. lk_vvl ) THEN 
    100          z_wn_trd_t = - glob_sum( surf(:,:) * wn(:,:,1) * tsb(:,:,1,jp_tem) ) 
    101          z_wn_trd_s = - glob_sum( surf(:,:) * wn(:,:,1) * tsb(:,:,1,jp_sal) ) 
     108         z2d0=0.0_wp ; z2d1=0.0_wp 
     109         DO ji=1,jpi 
     110            DO jj=1,jpj 
     111              z2d0(ji,jj) = surf(ji,jj) * wn(ji,jj,mikt(ji,jj)) * tsb(ji,jj,mikt(ji,jj),jp_tem) 
     112              z2d1(ji,jj) = surf(ji,jj) * wn(ji,jj,mikt(ji,jj)) * tsb(ji,jj,mikt(ji,jj),jp_sal) 
     113            ENDDO 
     114         ENDDO 
     115         z_wn_trd_t = - glob_sum( z2d0 )  
     116         z_wn_trd_s = - glob_sum( z2d1 ) 
    102117      ENDIF 
    103118 
     
    123138      ! heat & salt content variation (associated with ssh) 
    124139      IF( .NOT. lk_vvl ) THEN 
    125          z_ssh_hc = glob_sum( surf(:,:) * ( tsn(:,:,1,jp_tem) * sshn(:,:) - ssh_hc_loc_ini(:,:) ) ) 
    126          z_ssh_sc = glob_sum( surf(:,:) * ( tsn(:,:,1,jp_sal) * sshn(:,:) - ssh_sc_loc_ini(:,:) ) ) 
     140         z2d0=0.0_wp ; z2d1=0.0_wp 
     141         DO ji=1,jpi 
     142            DO jj=1,jpj 
     143              z2d0(ji,jj) = surf(ji,jj) * ( tsn(ji,jj,mikt(ji,jj),jp_tem) * sshn(ji,jj) - ssh_hc_loc_ini(ji,jj) )  
     144              z2d1(ji,jj) = surf(ji,jj) * ( tsn(ji,jj,mikt(ji,jj),jp_sal) * sshn(ji,jj) - ssh_sc_loc_ini(ji,jj) )  
     145            ENDDO 
     146         ENDDO 
     147         z_ssh_hc = glob_sum( z2d0 )  
     148         z_ssh_sc = glob_sum( z2d1 )  
    127149      ENDIF 
    128150 
     
    282304     CHARACTER(len=*), INTENT(in) ::   cdrw   ! "READ"/"WRITE" flag 
    283305     ! 
    284      INTEGER ::   jk   !  
     306     INTEGER ::   jk,ji,jj   !  
    285307     INTEGER ::   id1   ! local integers 
    286308     !!---------------------------------------------------------------------- 
     
    322344          frc_s = 0.d0                                           ! salt content   -    -   -    -         
    323345          IF( .NOT. lk_vvl ) THEN 
    324              ssh_hc_loc_ini(:,:) = tsn(:,:,1,jp_tem) * sshn(:,:)   ! initial heat content in ssh 
    325              ssh_sc_loc_ini(:,:) = tsn(:,:,1,jp_sal) * sshn(:,:)   ! initial salt content in ssh 
     346             DO ji=1,jpi 
     347                DO jj=1,jpj 
     348                   ssh_hc_loc_ini(ji,jj) = tsn(ji,jj,mikt(ji,jj),jp_tem) * sshn(ji,jj)   ! initial heat content in ssh 
     349                   ssh_sc_loc_ini(ji,jj) = tsn(ji,jj,mikt(ji,jj),jp_sal) * sshn(ji,jj)   ! initial salt content in ssh 
     350                ENDDO 
     351             ENDDO 
    326352             frc_wn_t = 0.d0                                       ! initial heat content misfit due to free surface 
    327353             frc_wn_s = 0.d0                                       ! initial salt content misfit due to free surface 
Note: See TracChangeset for help on using the changeset viewer.