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 12576 for NEMO/branches/UKMO/NEMO_4.0.1_icesheet_and_river_coupling/src/OCE/SBC/sbcisf.F90 – NEMO

Ignore:
Timestamp:
2020-03-20T12:39:37+01:00 (4 years ago)
Author:
dancopsey
Message:

Merge in iceberg calving stuff from dev_r5518_coupling_GSI7_GSI8_landice from the start of the branch to revision 6023.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/UKMO/NEMO_4.0.1_icesheet_and_river_coupling/src/OCE/SBC/sbcisf.F90

    r11715 r12576  
    9292      INTEGER ::   ji, jj, jk   ! loop index 
    9393      INTEGER ::   ikt, ikb     ! local integers 
     94      REAL(wp)                     ::   zgreenland_fwfisf_sum, zantarctica_fwfisf_sum  
    9495      REAL(wp), DIMENSION(jpi,jpj) ::   zt_frz, zdep   ! freezing temperature (zt_frz) at depth (zdep)  
    9596      REAL(wp), DIMENSION(:,:)  , ALLOCATABLE ::   zqhcisf2d 
     
    127128               fwfisf(:,:) = - sf_rnfisf(1)%fnow(:,:,1)         ! fresh water flux from the isf (fwfisf <0 mean melting)  
    128129            ENDIF 
     130 
     131            IF( lk_oasis) THEN 
     132              ! nn_coupled_iceshelf_fluxes uninitialised unless lk_oasis=true 
     133              IF( nn_coupled_iceshelf_fluxes .gt. 0 ) THEN 
     134 
     135                ! Adjust total iceshelf melt rates so that sum of iceberg calving and iceshelf melting in the northern 
     136                ! and southern hemispheres equals rate of increase of mass of greenland and antarctic ice sheets 
     137                ! to preserve total freshwater conservation in coupled models without an active ice sheet model. 
     138 
     139                ! All related global sums must be done bit reproducibly 
     140                 zgreenland_fwfisf_sum = glob_sum( fwfisf(:,:) * e1t(:,:) * e2t(:,:) * greenland_icesheet_mask(:,:) ) 
     141 
     142                 ! use ABS function because we need to preserve the sign of fwfisf 
     143                 WHERE( greenland_icesheet_mask(:,:) == 1.0 )                                                                  & 
     144                &    fwfisf(:,:) = fwfisf(:,:)  * ABS( greenland_icesheet_mass_rate_of_change * (1.0-rn_greenland_calving_fraction) & 
     145                &                           / ( zgreenland_fwfisf_sum + 1.0e-10_wp ) ) 
     146 
     147                 ! check 
     148                 IF(lwp .AND. ll_wrtstp) WRITE(numout, *) 'Greenland iceshelf melting climatology (kg/s) : ',zgreenland_fwfisf_sum 
     149 
     150                 zgreenland_fwfisf_sum = glob_sum( fwfisf(:,:) * e1t(:,:) * e2t(:,:) * greenland_icesheet_mask(:,:) ) 
     151 
     152                 IF(lwp .AND. ll_wrtstp) WRITE(numout, *) 'Greenland iceshelf melting adjusted value (kg/s) : ',zgreenland_fwfisf_sum 
     153 
     154                 zantarctica_fwfisf_sum = glob_sum( fwfisf(:,:) * e1t(:,:) * e2t(:,:) * antarctica_icesheet_mask(:,:) ) 
     155 
     156                 ! use ABS function because we need to preserve the sign of fwfisf 
     157                 WHERE( antarctica_icesheet_mask(:,:) == 1.0 ) & 
     158                &    fwfisf(:,:) = fwfisf(:,:)  * ABS( antarctica_icesheet_mass_rate_of_change * (1.0-rn_antarctica_calving_fraction) & 
     159                &                           / ( zantarctica_fwfisf_sum + 1.0e-10_wp ) ) 
     160 
     161                 ! check 
     162                 IF(lwp .AND. ll_wrtstp) WRITE(numout, *) 'Antarctica iceshelf melting climatology (kg/s) : ',zantarctica_fwfisf_sum 
     163 
     164                 zantarctica_fwfisf_sum = glob_sum( fwfisf(:,:) * e1t(:,:) * e2t(:,:) * antarctica_icesheet_mask(:,:) ) 
     165 
     166                 IF(lwp .AND. ll_wrtstp) WRITE(numout, *) 'Antarctica iceshelf melting adjusted value (kg/s) : ',zantarctica_fwfisf_sum 
     167 
     168              ENDIF 
     169            ENDIF 
     170 
    129171            qisf(:,:)   = fwfisf(:,:) * rLfusisf             ! heat flux 
    130172            stbl(:,:)   = soce 
     
    137179               fwfisf(:,:) = -sf_fwfisf(1)%fnow(:,:,1)            ! fwf 
    138180            ENDIF 
     181 
     182            IF( lk_oasis) THEN 
     183              ! nn_coupled_iceshelf_fluxes uninitialised unless lk_oasis=true 
     184              IF( nn_coupled_iceshelf_fluxes .gt. 0 ) THEN 
     185 
     186                ! Adjust total iceshelf melt rates so that sum of iceberg calving and iceshelf melting in the northern 
     187                ! and southern hemispheres equals rate of increase of mass of greenland and antarctic ice sheets 
     188                ! to preserve total freshwater conservation in coupled models without an active ice sheet model. 
     189 
     190                ! All related global sums must be done bit reproducibly 
     191                 zgreenland_fwfisf_sum = glob_sum( fwfisf(:,:) * e1t(:,:) * e2t(:,:) * greenland_icesheet_mask(:,:) ) 
     192 
     193                 ! use ABS function because we need to preserve the sign of fwfisf 
     194                 WHERE( greenland_icesheet_mask(:,:) == 1.0 )                                                                  & 
     195                &    fwfisf(:,:) = fwfisf(:,:)  * ABS( greenland_icesheet_mass_rate_of_change * (1.0-rn_greenland_calving_fraction) & 
     196                &                           / ( zgreenland_fwfisf_sum + 1.0e-10_wp ) ) 
     197 
     198                 ! check 
     199                 IF(lwp .AND. ll_wrtstp) WRITE(numout, *) 'Greenland iceshelf melting climatology (kg/s) : ',zgreenland_fwfisf_sum 
     200 
     201                 zgreenland_fwfisf_sum = glob_sum( fwfisf(:,:) * e1t(:,:) * e2t(:,:) * greenland_icesheet_mask(:,:) ) 
     202 
     203                 IF(lwp .AND. ll_wrtstp) WRITE(numout, *) 'Greenland iceshelf melting adjusted value (kg/s) : ',zgreenland_fwfisf_sum 
     204 
     205                 zantarctica_fwfisf_sum = glob_sum( fwfisf(:,:) * e1t(:,:) * e2t(:,:) * antarctica_icesheet_mask(:,:) ) 
     206 
     207                 ! use ABS function because we need to preserve the sign of fwfisf 
     208                 WHERE( antarctica_icesheet_mask(:,:) == 1.0 ) & 
     209                &    fwfisf(:,:) = fwfisf(:,:)  * ABS( antarctica_icesheet_mass_rate_of_change * (1.0-rn_antarctica_calving_fraction) & 
     210                &                           / ( zantarctica_fwfisf_sum + 1.0e-10_wp ) ) 
     211 
     212                 ! check 
     213                 IF(lwp .AND. ll_wrtstp) WRITE(numout, *) 'Antarctica iceshelf melting climatology (kg/s) : ',zantarctica_fwfisf_sum 
     214 
     215                 zantarctica_fwfisf_sum = glob_sum( fwfisf(:,:) * e1t(:,:) * e2t(:,:) * antarctica_icesheet_mask(:,:) ) 
     216 
     217                 IF(lwp .AND. ll_wrtstp) WRITE(numout, *) 'Antarctica iceshelf melting adjusted value (kg/s) : ',zantarctica_fwfisf_sum 
     218 
     219              ENDIF 
     220            ENDIF 
     221 
    139222            qisf(:,:)   = fwfisf(:,:) * rLfusisf               ! heat flux 
    140223            stbl(:,:)   = soce 
Note: See TracChangeset for help on using the changeset viewer.