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 6507 for branches/UKMO/dev_r6501_GO6_package_trunk/NEMOGCM/NEMO/OPA_SRC/SBC/sbcisf.F90 – NEMO

Ignore:
Timestamp:
2016-05-03T14:28:12+02:00 (8 years ago)
Author:
timgraham
Message:

First attempt at merging in science changes from GO6 package branch at v3.6 stable (Note-namelists not yet dealt with)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r6501_GO6_package_trunk/NEMOGCM/NEMO/OPA_SRC/SBC/sbcisf.F90

    r6503 r6507  
    133133            CALL fld_read ( kt, nn_fsbc, sf_rnfisf   ) 
    134134            fwfisf(:,:) = - sf_rnfisf(1)%fnow(:,:,1)         ! fwf  flux from the isf (fwfisf <0 mean melting)  
     135 
     136            IF( lk_oasis) THEN 
     137            ! ln_coupled_iceshelf_fluxes uninitialised unless lk_oasis=true 
     138            IF( ln_coupled_iceshelf_fluxes ) THEN 
     139 
     140              ! Adjust total iceshelf melt rates so that sum of iceberg calving and iceshelf melting in the northern 
     141              ! and southern hemispheres equals rate of increase of mass of greenland and antarctic ice sheets 
     142              ! to preserve total freshwater conservation in coupled models without an active ice sheet model. 
     143 
     144               zgreenland_fwfisf_sum = SUM( fwfisf(:,:) * e1t(:,:) * e2t(:,:) * greenland_icesheet_mask(:,:) ) 
     145               IF( lk_mpp ) CALL mpp_sum( zgreenland_fwfisf_sum ) 
     146               ! use ABS function because we need to preserve the sign of fwfisf 
     147               WHERE( greenland_icesheet_mask(:,:) == 1.0 )                                                                  & 
     148              &    fwfisf(:,:) = fwfisf(:,:)  * ABS( greenland_icesheet_mass_rate_of_change * (1.0-rn_greenland_calving_fraction) & 
     149              &                           / ( zgreenland_fwfisf_sum + 1.0e-10_wp ) ) 
     150 
     151               ! check 
     152               IF(lwp) WRITE(numout, *) 'Greenland iceshelf melting climatology (kg/s) : ',zgreenland_fwfisf_sum 
     153               zgreenland_fwfisf_sum = SUM( fwfisf(:,:) * e1t(:,:) * e2t(:,:) * greenland_icesheet_mask(:,:) ) 
     154               IF( lk_mpp ) CALL mpp_sum( zgreenland_fwfisf_sum ) 
     155               IF(lwp) WRITE(numout, *) 'Greenland iceshelf melting adjusted value (kg/s) : ',zgreenland_fwfisf_sum 
     156 
     157               zantarctica_fwfisf_sum = SUM( fwfisf(:,:) * e1t(:,:) * e2t(:,:) * antarctica_icesheet_mask(:,:) ) 
     158               IF( lk_mpp ) CALL mpp_sum( zantarctica_fwfisf_sum ) 
     159               ! use ABS function because we need to preserve the sign of fwfisf 
     160               WHERE( antarctica_icesheet_mask(:,:) == 1.0 ) & 
     161              &    fwfisf(:,:) = fwfisf(:,:)  * ABS( antarctica_icesheet_mass_rate_of_change * (1.0-rn_antarctica_calving_fraction) & 
     162              &                           / ( zantarctica_fwfisf_sum + 1.0e-10_wp ) ) 
     163       
     164               ! check 
     165               IF(lwp) WRITE(numout, *) 'Antarctica iceshelf melting climatology (kg/s) : ',zantarctica_fwfisf_sum 
     166               zantarctica_fwfisf_sum = SUM( fwfisf(:,:) * e1t(:,:) * e2t(:,:) * antarctica_icesheet_mask(:,:) ) 
     167               IF( lk_mpp ) CALL mpp_sum( zantarctica_fwfisf_sum ) 
     168               IF(lwp) WRITE(numout, *) 'Antarctica iceshelf melting adjusted value (kg/s) : ',zantarctica_fwfisf_sum 
     169 
     170            ENDIF 
     171            ENDIF 
     172 
    135173            qisf(:,:)   = fwfisf(:,:) * rlfusisf             ! heat flux 
    136174            stbl(:,:)   = soce 
     
    139177            CALL fld_read ( kt, nn_fsbc, sf_fwfisf   ) 
    140178            fwfisf(:,:) = - sf_fwfisf(1)%fnow(:,:,1)           ! fwf  flux from the isf (fwfisf <0 mean melting) 
     179 
     180            IF( lk_oasis) THEN 
     181            ! ln_coupled_iceshelf_fluxes uninitialised unless lk_oasis=true 
     182            IF( ln_coupled_iceshelf_fluxes ) THEN 
     183 
     184              ! Adjust total iceshelf melt rates so that sum of iceberg calving and iceshelf melting in the northern 
     185              ! and southern hemispheres equals rate of increase of mass of greenland and antarctic ice sheets 
     186              ! to preserve total freshwater conservation in coupled models without an active ice sheet model. 
     187 
     188               zgreenland_fwfisf_sum = SUM( fwfisf(:,:) * e1t(:,:) * e2t(:,:) * greenland_icesheet_mask(:,:) ) 
     189               IF( lk_mpp ) CALL mpp_sum( zgreenland_fwfisf_sum ) 
     190               ! use ABS function because we need to preserve the sign of fwfisf 
     191               WHERE( greenland_icesheet_mask(:,:) == 1.0 )                                                                  & 
     192              &    fwfisf(:,:) = fwfisf(:,:)  * ABS( greenland_icesheet_mass_rate_of_change * (1.0-rn_greenland_calving_fraction) & 
     193              &                           / ( zgreenland_fwfisf_sum + 1.0e-10_wp ) ) 
     194 
     195               ! check 
     196               IF(lwp) WRITE(numout, *) 'Greenland iceshelf melting climatology (kg/s) : ',zgreenland_fwfisf_sum 
     197               zgreenland_fwfisf_sum = SUM( fwfisf(:,:) * e1t(:,:) * e2t(:,:) * greenland_icesheet_mask(:,:) ) 
     198               IF( lk_mpp ) CALL mpp_sum( zgreenland_fwfisf_sum ) 
     199               IF(lwp) WRITE(numout, *) 'Greenland iceshelf melting adjusted value (kg/s) : ',zgreenland_fwfisf_sum 
     200 
     201               zantarctica_fwfisf_sum = SUM( fwfisf(:,:) * e1t(:,:) * e2t(:,:) * antarctica_icesheet_mask(:,:) ) 
     202               IF( lk_mpp ) CALL mpp_sum( zantarctica_fwfisf_sum ) 
     203               ! use ABS function because we need to preserve the sign of fwfisf 
     204               WHERE( antarctica_icesheet_mask(:,:) == 1.0 ) & 
     205              &    fwfisf(:,:) = fwfisf(:,:)  * ABS( antarctica_icesheet_mass_rate_of_change * (1.0-rn_antarctica_calving_fraction) & 
     206              &                           / ( zantarctica_fwfisf_sum + 1.0e-10_wp ) ) 
     207       
     208               ! check 
     209               IF(lwp) WRITE(numout, *) 'Antarctica iceshelf melting climatology (kg/s) : ',zantarctica_fwfisf_sum 
     210               zantarctica_fwfisf_sum = SUM( fwfisf(:,:) * e1t(:,:) * e2t(:,:) * antarctica_icesheet_mask(:,:) ) 
     211               IF( lk_mpp ) CALL mpp_sum( zantarctica_fwfisf_sum ) 
     212               IF(lwp) WRITE(numout, *) 'Antarctica iceshelf melting adjusted value (kg/s) : ',zantarctica_fwfisf_sum 
     213 
     214            ENDIF 
     215            ENDIF 
     216 
    141217            qisf(:,:)   = fwfisf(:,:) * rlfusisf               ! heat flux 
    142218            stbl(:,:)   = soce 
     
    155231         CALL eos_fzp( stbl(:,:), zt_frz(:,:), zdep(:,:) ) 
    156232          
     233         ! if apply only on the trend and not as a volume flux (rdivisf = 0), fwfisf have to be set to 0 now 
     234         fwfisf(:,:) = rdivisf * fwfisf(:,:)          
     235  
    157236         risf_tsc(:,:,jp_tem) = qisf(:,:) * r1_rau0_rcp - fwfisf(:,:) * zt_frz(:,:) * r1_rau0 ! 
    158237         risf_tsc(:,:,jp_sal) = 0.0_wp 
Note: See TracChangeset for help on using the changeset viewer.