Changeset 11521
- Timestamp:
- 2019-09-10T11:49:13+02:00 (4 years ago)
- Location:
- NEMO/branches/2019/ENHANCE-02_ISF_nemo
- Files:
-
- 26 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/ENHANCE-02_ISF_nemo/cfgs/SHARED/field_def_nemo-oce.xml
r11395 r11521 264 264 265 265 <!-- * variable related to ice shelf forcing * --> 266 <field id="isfdebug3d" grid_ref="grid_T_3D" /> 267 <field id="isfdebug2d" /> 266 268 <field id="fwfisf_cav" long_name="Ice shelf melting" unit="kg/m2/s" /> 267 269 <field id="fwfisf_par" long_name="Ice shelf melting" unit="kg/m2/s" /> -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/cfgs/SHARED/namelist_ref
r11489 r11521 435 435 !----------------------------------------------------------------------- 436 436 ! 437 ! ---------------- general ------------------------------- 437 ! ---------------- ice shelf load ------------------------------- 438 ! 439 cn_isfload = 'isomip' ! scheme to compute ice shelf load (ln_isfcav = .true. in domain_cfg.nc) 440 ! 441 ! ---------------- ice shelf melt formulation ------------------------------- 438 442 ! 439 443 ln_isf = .false. ! activate ice shelf module 440 cn_isfdir = './' ! directory for all ice shelf input file 441 ! 442 ! ---------------- cavities opened ------------------------------- 443 ! 444 cn_isfload = 'isomip' 445 ! 446 ln_isfcav_mlt = .false. ! ice shelf melting into the cavity 447 cn_isfcav_mlt = '3eq' ! ice shelf melting formulation (spe/2eq/3eq/oasis) 448 ! ! spe = fwfisf is read from a forcing field 449 ! ! 2eq = ISOMIP like: 2 equations formulation (Hunter et al., 2006) 450 ! ! 3eq = ISOMIP+ like: 3 equations formulation (Asay-Davis et al., 2015) 451 ! ! oasis = fwfisf is given by oasis and pattern by file sn_isfcav_fwf 452 ! ! cn_isfcav_mlt = 2eq or 3eq cases: 453 cn_gammablk = 'ad15' ! scheme to compute gammat/s (spe,ad15,hj99) 454 ! ! ad15 = velocity dependend Gamma (u* * gammat/s) (Jenkins et al. 2010) 455 ! ! hj99 = velocity and stability dependent Gamma (Holland et al. 1999) 456 rn_gammat0 = 1.e-4 ! gammat coefficient used in blk formula 457 rn_gammas0 = 1.e-4 ! gammas coefficient used in blk formula 444 cn_isfdir = './' ! directory for all ice shelf input file 458 445 ! 459 rn_htbl = 30. ! thickness of the top boundary layer (Losh et al. 2008) 460 ! ! 0 => thickness of the tbl = thickness of the first wet cell 446 ! ---------------- cavities opened ------------------------------- 461 447 ! 462 !* 'spe' and 'oasis' case 463 !___________!_____________!___________________!___________!_____________!_________!___________!__________!__________!_______________! 464 ! ! file name ! frequency (hours) ! variable ! time interp.! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 465 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! 466 sn_isfcav_fwf = 'isfmlt_cav', -12 , 'fwflisf' , .false. , .true. , 'yearly' , '' , '' , '' 467 ! 468 ! ---------------- cavities parametrised ------------------------------- 469 ! 470 ln_isfpar_mlt = .false. ! ice shelf melting parametrised 471 cn_isfpar_mlt = 'spe' ! ice shelf melting parametrisation (spe/bg03/oasis) 472 ! ! spe = fwfisf is read from a forcing field 473 ! ! bg03 = melt computed using Beckmann and Goosse parametrisation 474 ! ! oasis = fwfisf is given by oasis and pattern by file sn_isfpar_fwf 448 ln_isfcav_mlt = .false. ! ice shelf melting into the cavity (need ln_isfcav = .true. in domain_cfg.nc) 449 cn_isfcav_mlt = '3eq' ! ice shelf melting formulation (spe/2eq/3eq/oasis) 450 ! ! spe = fwfisf is read from a forcing field 451 ! ! 2eq = ISOMIP like: 2 equations formulation (Hunter et al., 2006) 452 ! ! 3eq = ISOMIP+ like: 3 equations formulation (Asay-Davis et al., 2015) 453 ! ! oasis = fwfisf is given by oasis and pattern by file sn_isfcav_fwf 454 ! ! cn_isfcav_mlt = 2eq or 3eq cases: 455 cn_gammablk = 'ad15' ! scheme to compute gammat/s (spe,ad15,hj99) 456 ! ! ad15 = velocity dependend Gamma (u* * gammat/s) (Jenkins et al. 2010) 457 ! ! hj99 = velocity and stability dependent Gamma (Holland et al. 1999) 458 rn_gammat0 = 1.e-4 ! gammat coefficient used in blk formula 459 rn_gammas0 = 1.e-4 ! gammas coefficient used in blk formula 460 ! 461 rn_htbl = 30. ! thickness of the top boundary layer (Losh et al. 2008) 462 ! ! 0 => thickness of the tbl = thickness of the first wet cell 463 ! 464 !* 'spe' and 'oasis' case 465 !___________!_____________!___________________!___________!_____________!_________!___________!__________!__________!_______________! 466 ! ! file name ! frequency (hours) ! variable ! time interp.! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 467 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! 468 sn_isfcav_fwf = 'isfmlt_cav', -12 , 'fwflisf' , .false. , .true. , 'yearly' , '' , '' , '' 475 469 ! 476 !* all cases 477 !___________!_____________!___________________!___________!_____________!_________!___________!__________!__________!_______________! 478 ! ! file name ! frequency (hours) ! variable ! time interp.! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 479 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! 480 sn_isfpar_zmax = 'isfmlt_par', 0 ,'sozisfmax', .false. , .true. , 'yearly' , '' , '' , '' 481 sn_isfpar_zmin = 'isfmlt_par', 0 ,'sozisfmin', .false. , .true. , 'yearly' , '' , '' , '' 482 !* 'spe' and 'oasis' case 483 sn_isfpar_fwf = 'isfmlt_par' , -12 ,'fwfisf' , .false. , .true. , 'yearly' , '' , '' , '' 484 !* 'bg03' case 485 sn_isfpar_Leff = 'isfmlt_par', 0 ,'Leff' , .false. , .true. , 'yearly' , '' , '' , '' 470 ! ---------------- cavities parametrised ------------------------------- 471 ! 472 ln_isfpar_mlt = .false. ! ice shelf melting parametrised 473 cn_isfpar_mlt = 'spe' ! ice shelf melting parametrisation (spe/bg03/oasis) 474 ! ! spe = fwfisf is read from a forcing field 475 ! ! bg03 = melt computed using Beckmann and Goosse parametrisation 476 ! ! oasis = fwfisf is given by oasis and pattern by file sn_isfpar_fwf 477 ! 478 !* all cases 479 !___________!_____________!___________________!___________!_____________!_________!___________!__________!__________!_______________! 480 ! ! file name ! frequency (hours) ! variable ! time interp.! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! 481 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! 482 sn_isfpar_zmax = 'isfmlt_par', 0 ,'sozisfmax', .false. , .true. , 'yearly' , '' , '' , '' 483 sn_isfpar_zmin = 'isfmlt_par', 0 ,'sozisfmin', .false. , .true. , 'yearly' , '' , '' , '' 484 !* 'spe' and 'oasis' case 485 sn_isfpar_fwf = 'isfmlt_par' , -12 ,'fwfisf' , .false. , .true. , 'yearly' , '' , '' , '' 486 !* 'bg03' case 487 sn_isfpar_Leff = 'isfmlt_par', 0 ,'Leff' , .false. , .true. , 'yearly' , '' , '' , '' 486 488 ! 487 489 ! ---------------- ice sheet coupling ------------------------------- -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/DIA/diahsb.F90
r11395 r11521 48 48 REAL(wp), DIMENSION(:,:) , ALLOCATABLE :: ssh_hc_loc_ini, ssh_sc_loc_ini ! 49 49 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: hc_loc_ini, sc_loc_ini, e3t_ini ! 50 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: tmask_ini 50 51 51 52 !! * Substitutions … … 156 157 ! 157 158 DO jk = 1, jpkm1 ! volume variation (calculated with scale factors) 158 zwrk(:,:,jk) = ( surf(:,:)*e3t_n(:,:,jk) - surf_ini(:,:)*e3t_ini(:,:,jk) ) * tmask(:,:,jk)159 zwrk(:,:,jk) = surf(:,:)*e3t_n(:,:,jk)*tmask(:,:,jk) - surf_ini(:,:)*e3t_ini(:,:,jk)*tmask_ini(:,:,jk) 159 160 END DO 160 zdiff_v2 = glob_sum_full( 'diahsb', zwrk(:,:,:) ) 161 zdiff_v2 = glob_sum_full( 'diahsb', zwrk(:,:,:) ) ! glob_sum_full needed as tmask and tmask_ini could be different 161 162 DO jk = 1, jpkm1 ! heat content variation 162 zwrk(:,:,jk) = ( surf(:,:)*e3t_n(:,:,jk)*tsn(:,:,jk,jp_tem) - surf_ini(:,:)*hc_loc_ini(:,:,jk) ) * tmask(:,:,jk)163 zwrk(:,:,jk) = ( surf(:,:)*e3t_n(:,:,jk)*tsn(:,:,jk,jp_tem) - surf_ini(:,:)*hc_loc_ini(:,:,jk) ) 163 164 END DO 164 165 zdiff_hc = glob_sum_full( 'diahsb', zwrk(:,:,:) ) 165 166 DO jk = 1, jpkm1 ! salt content variation 166 zwrk(:,:,jk) = ( surf(:,:)*e3t_n(:,:,jk)*tsn(:,:,jk,jp_sal) - surf_ini(:,:)*sc_loc_ini(:,:,jk) ) * tmask(:,:,jk)167 zwrk(:,:,jk) = ( surf(:,:)*e3t_n(:,:,jk)*tsn(:,:,jk,jp_sal) - surf_ini(:,:)*sc_loc_ini(:,:,jk) ) 167 168 END DO 168 169 zdiff_sc = glob_sum_full( 'diahsb', zwrk(:,:,:) ) … … 188 189 zwrk(:,:,jk) = surf(:,:) * e3t_n(:,:,jk) * tmask(:,:,jk) 189 190 END DO 190 zvol_tot = glob_sum _full( 'diahsb', zwrk(:,:,:) )191 zvol_tot = glob_sum( 'diahsb', zwrk(:,:,:) ) 191 192 192 193 !!gm to be added ? … … 271 272 CALL iom_get( numror, jpdom_autoglo, 'ssh_ini' , ssh_ini , ldxios = lrxios ) 272 273 CALL iom_get( numror, jpdom_autoglo, 'e3t_ini' , e3t_ini , ldxios = lrxios ) 274 CALL iom_get( numror, jpdom_autoglo, 'tmask_ini' , tmask_ini , ldxios = lrxios ) 273 275 CALL iom_get( numror, jpdom_autoglo, 'hc_loc_ini', hc_loc_ini, ldxios = lrxios ) 274 276 CALL iom_get( numror, jpdom_autoglo, 'sc_loc_ini', sc_loc_ini, ldxios = lrxios ) … … 326 328 CALL iom_rstput( kt, nitrst, numrow, 'ssh_ini' , ssh_ini , ldxios = lwxios ) 327 329 CALL iom_rstput( kt, nitrst, numrow, 'e3t_ini' , e3t_ini , ldxios = lwxios ) 330 CALL iom_rstput( kt, nitrst, numrow, 'tmask_ini' , tmask_ini , ldxios = lwxios ) 328 331 CALL iom_rstput( kt, nitrst, numrow, 'hc_loc_ini', hc_loc_ini, ldxios = lwxios ) 329 332 CALL iom_rstput( kt, nitrst, numrow, 'sc_loc_ini', sc_loc_ini, ldxios = lwxios ) … … 397 400 ! ------------------- ! 398 401 ALLOCATE( hc_loc_ini(jpi,jpj,jpk), sc_loc_ini(jpi,jpj,jpk), surf_ini(jpi,jpj), & 399 & e3t_ini(jpi,jpj,jpk), surf(jpi,jpj), ssh_ini(jpi,jpj), STAT=ierror )402 & e3t_ini(jpi,jpj,jpk), surf(jpi,jpj), ssh_ini(jpi,jpj), tmask_ini(jpi,jpj,jpk),STAT=ierror ) 400 403 IF( ierror > 0 ) THEN 401 404 CALL ctl_stop( 'dia_hsb_init: unable to allocate hc_loc_ini' ) ; RETURN -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/DIA/diawri.F90
r11494 r11521 27 27 USE oce ! ocean dynamics and tracers 28 28 USE isf 29 USE isfcpl 29 30 USE dom_oce ! ocean space and time domain 30 31 USE phycst ! physical constants … … 884 885 !!---------------------------------------------------------------------- 885 886 CHARACTER (len=* ), INTENT( in ) :: cdfile_name ! name of the file created 887 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zisfdebug 886 888 !! 887 INTEGER :: inum 889 INTEGER :: inum, jk 888 890 !!---------------------------------------------------------------------- 889 891 ! … … 923 925 END IF 924 926 END IF 927 DO jk = 1,jpk 928 zisfdebug(:,:,jk) = risfcpl_cons_vol(:,:,jk) * rdt_iscpl / e1e2t(:,:) 929 END DO 930 CALL iom_rstput( 0, 0, inum, 'isfdebug', zisfdebug) 925 931 IF( ALLOCATED(ahtu) ) THEN 926 932 CALL iom_rstput( 0, 0, inum, 'ahtu', ahtu ) ! aht at u-point -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/DOM/dom_oce.F90
r11403 r11521 35 35 REAL(wp), PUBLIC :: rn_atfp !: asselin time filter parameter 36 36 INTEGER , PUBLIC :: nn_euler !: =0 start with forward time step or not (=1) 37 LOGICAL , PUBLIC :: ln_iscpl !: coupling with ice sheet38 37 LOGICAL , PUBLIC :: ln_crs !: Apply grid coarsening to dynamical model output or online passive tracers 39 38 -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/DOM/domain.F90
r11395 r11521 185 185 IF( lk_c1d ) CALL cor_c1d ! 1D configuration: Coriolis set at T-point 186 186 ! 187 IF( ln_meshmask .AND. .NOT.ln_iscpl ) CALL dom_wri ! Create a domain file 188 IF( ln_meshmask .AND. ln_iscpl .AND. .NOT.ln_rstart ) CALL dom_wri ! Create a domain file 189 IF( .NOT.ln_rstart ) CALL dom_ctl ! Domain control 190 ! 191 IF( ln_write_cfg ) CALL cfg_write ! create the configuration file 187 IF( ln_meshmask ) CALL dom_wri ! Create a domain file 188 IF( .NOT.ln_rstart ) CALL dom_ctl ! Domain control 189 ! 190 IF( ln_write_cfg ) CALL cfg_write ! create the configuration file 192 191 ! 193 192 IF(lwp) THEN … … 285 284 & nn_it000, nn_itend , nn_date0 , nn_time0 , nn_leapy , nn_istate , & 286 285 & nn_stock, nn_write , ln_mskland , ln_clobber , nn_chunksz, nn_euler , & 287 & ln_cfmeta, ln_ iscpl, ln_xios_read, nn_wxios286 & ln_cfmeta, ln_xios_read, nn_wxios 288 287 NAMELIST/namdom/ ln_linssh, rn_rdt, rn_atfp, ln_crs, ln_meshmask 289 288 #if defined key_netcdf4 … … 334 333 WRITE(numout,*) ' overwrite an existing file ln_clobber = ', ln_clobber 335 334 WRITE(numout,*) ' NetCDF chunksize (bytes) nn_chunksz = ', nn_chunksz 336 WRITE(numout,*) ' IS coupling at the restart step ln_iscpl = ', ln_iscpl337 335 IF( TRIM(Agrif_CFixed()) == '0' ) THEN 338 336 WRITE(numout,*) ' READ restart for a single file using XIOS ln_xios_read =', ln_xios_read -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/DOM/domvvl.F90
r11423 r11521 20 20 USE oce ! ocean dynamics and tracers 21 21 USE isfcpl 22 USE isf 22 23 USE phycst ! physical constant 23 24 USE dom_oce ! ocean space and time domain … … 816 817 ! 817 818 ! coupling with an ice sheet model (grounding/calving line migration) 818 IF ( ln_is cpl ) THEN819 IF ( ln_isfcpl ) THEN 819 820 ! 820 821 ! extrapolate ssh over new water column if needed -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/DYN/divhor.F90
r11423 r11521 19 19 !!---------------------------------------------------------------------- 20 20 USE oce ! ocean dynamics and tracers 21 USE isf 22 USE isfutils 21 23 USE dom_oce ! ocean space and time domain 22 USE sbc_oce, ONLY : ln_rnf , ln_isf! surface boundary condition: ocean24 USE sbc_oce, ONLY : ln_rnf ! surface boundary condition: ocean 23 25 USE sbcrnf ! river runoff 24 26 USE isfhdiv ! ice shelf … … 98 100 ! 99 101 #endif 100 IF( ln_isf ) CALL isf_hdiv( kt, hdivn ) !== ice shelf ==! (update hdivn field) 102 CALL debug('isfdivdebug 0',hdivn) 103 IF( ln_isf .OR. ll_isfcpl_cons ) CALL isf_hdiv( kt, hdivn ) !== ice shelf ==! (update hdivn field) 104 CALL debug('isfdivdebug 3',hdivn) 101 105 ! 102 106 CALL lbc_lnk( 'divhor', hdivn, 'T', 1. ) ! (no sign change) -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/DYN/dynnxt.F90
r11395 r11521 26 26 !!------------------------------------------------------------------------- 27 27 USE oce ! ocean dynamics and tracers 28 USE isf 28 29 USE dom_oce ! ocean space and time domain 29 30 USE sbc_oce ! Surface boundary condition: ocean fields -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/DYN/dynspg_ts.F90
r11395 r11521 34 34 USE zdfdrg ! vertical physics: top/bottom drag coef. 35 35 USE isf ! ice shelf variable (fwfisf) 36 USE isfutils 36 37 USE sbcapr ! surface boundary condition: atmospheric pressure 37 38 USE dynadv , ONLY: ln_dynadv_vec … … 643 644 zssh_frc(:,:) = zssh_frc(:,:) + div_sd(:,:) 644 645 ENDIF 646 ! 647 IF( ll_isfcpl_cons ) THEN 648 zssh_frc(:,:) = zssh_frc(:,:) + risfcpl_cons_ssh(:,:) 649 END IF 645 650 ! 646 651 #if defined key_asminc -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/DYN/sshwzv.F90
r11395 r11521 18 18 USE oce ! ocean dynamics and tracers variables 19 19 USE isf ! ice shelf 20 USE isfutils 20 21 USE dom_oce ! ocean space and time domain variables 21 22 USE sbc_oce ! surface boundary condition: ocean … … 255 256 IF( .NOT.ln_linssh ) THEN ! before <-- with forcing removed 256 257 zcoef = atfp * rdt * r1_rau0 257 sshb(:,:) = sshb(:,:) - zcoef * ( emp_b(:,:) - emp (:,:)&258 & - rnf_b(:,:) + rnf (:,:)&258 sshb(:,:) = sshb(:,:) - zcoef * ( emp_b(:,:) - emp (:,:) & 259 & - rnf_b(:,:) + rnf (:,:) & 259 260 & + fwfisf_cav_b(:,:) - fwfisf_cav(:,:) & 260 261 & + fwfisf_par_b(:,:) - fwfisf_par(:,:) ) * ssmask(:,:) -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/IOM/iom.F90
r10817 r11521 378 378 CALL iom_set_rstw_var_active('sshn') 379 379 CALL iom_set_rstw_var_active('rhop') 380 ! extra variable needed for the ice sheet coupling381 IF ( ln_iscpl ) THEN382 CALL iom_set_rstw_var_active('tmask')383 CALL iom_set_rstw_var_active('umask')384 CALL iom_set_rstw_var_active('vmask')385 CALL iom_set_rstw_var_active('smask')386 CALL iom_set_rstw_var_active('e3t_n')387 CALL iom_set_rstw_var_active('e3u_n')388 CALL iom_set_rstw_var_active('e3v_n')389 CALL iom_set_rstw_var_active('gdepw_n')390 END IF391 380 ENDIF 392 381 IF(ln_diurnal) CALL iom_set_rstw_var_active('Dsst') -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isf.F90
r11489 r11521 30 30 ! 0.1 -------- ice shelf cavity parameter -------------- 31 31 CHARACTER(LEN=256), PUBLIC :: cn_isfdir 32 LOGICAL , PUBLIC :: ln_isf 32 33 ! 33 34 ! 0.2 -------- ice shelf cavity opened namelist parameter ------------- … … 100 101 INTEGER , PUBLIC :: nstp_iscpl !: 101 102 REAL(wp), PUBLIC :: rdt_iscpl !: 102 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: risfcpl_vol, risfcpl_cons_vol !: 103 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: risfcpl_tsc, risfcpl_cons_tsc !: 103 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: risfcpl_cons_ssh, risfcpl_cons_ssh_b !: 104 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: risfcpl_vol, risfcpl_cons_vol, risfcpl_cons_vol_b !: 105 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: risfcpl_tsc, risfcpl_cons_tsc, risfcpl_cons_tsc_b !: 104 106 ! 105 107 !!---------------------------------------------------------------------- … … 184 186 ! 185 187 ALLOCATE( risfcpl_tsc(jpi,jpj,jpk,jpts) , risfcpl_vol(jpi,jpj,jpk) , & 186 & risfcpl_cons_tsc(jpi,jpj,jpk,jpts) , risfcpl_cons_vol(jpi,jpj,jpk) , STAT=ialloc ) 188 & risfcpl_cons_tsc(jpi,jpj,jpk,jpts) , risfcpl_cons_vol(jpi,jpj,jpk) , & 189 & risfcpl_cons_tsc_b(jpi,jpj,jpk,jpts) , risfcpl_cons_vol_b(jpi,jpj,jpk), & 190 risfcpl_cons_ssh_b(jpi,jpj), risfcpl_cons_ssh(jpi,jpj), STAT=ialloc ) 187 191 ierr = ierr + ialloc 188 192 ! -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isfcav.F90
r11495 r11521 78 78 ! 79 79 ! output T/S/U/V for the top boundary layer 80 CALL iom_put('ttbl_cav',zttbl(:,:) )81 CALL iom_put('stbl' ,zstbl(:,:) )80 CALL iom_put('ttbl_cav',zttbl(:,:) * mskisf_cav(:,:)) 81 CALL iom_put('stbl' ,zstbl(:,:) * mskisf_cav(:,:)) 82 82 ! 83 83 ! initialisation -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isfcavgam.F90
r11495 r11521 64 64 ! 65 65 ! mask velocity in tbl with ice shelf mask 66 !zutbl(:,:) = zutbl(:,:) * mskisf_cav(:,:)67 !zvtbl(:,:) = zvtbl(:,:) * mskisf_cav(:,:)66 zutbl(:,:) = zutbl(:,:) * mskisf_cav(:,:) 67 zvtbl(:,:) = zvtbl(:,:) * mskisf_cav(:,:) 68 68 ! 69 69 ! output -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isfdiags.F90
r11395 r11521 17 17 USE dom_oce 18 18 USE isf ! ice shelf variable 19 USE isfutils 19 20 USE iom ! 20 21 … … 93 94 ! compute 3d output 94 95 zvar2d(:,:) = pvar2d(:,:) / phtbl(:,:) 96 zvar3d(:,:,:) = 0._wp 97 ! 95 98 DO jj = 1,jpj 96 99 DO ji = 1,jpi … … 98 101 ikb = kbot(ji,jj) 99 102 DO jk = ikt, ikb - 1 100 zvar3d(ji,jj,jk) = zvar 3d(ji,jj,jk) + zvar2d(ji,jj) * e3t_n(ji,jj,jk)103 zvar3d(ji,jj,jk) = zvar2d(ji,jj) * e3t_n(ji,jj,jk) 101 104 END DO 102 ! phtbl(ji,jj) * pfrac(ji,jj) = thickness of bottom affected by tbl 103 zvar3d(ji,jj,ikb) = zvar3d(ji,jj,ikb) + zvar2d(ji,jj) * e3t_n(ji,jj,ikb) * pfrac(ji,jj) 105 zvar3d(ji,jj,ikb) = zvar2d(ji,jj) * e3t_n(ji,jj,ikb) * pfrac(ji,jj) 104 106 END DO 105 107 END DO 106 108 ! 107 ! output data108 109 CALL iom_put( TRIM(cdvar) , zvar3d(:,:,:)) 109 110 ! -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isfhdiv.F90
r11423 r11521 2 2 3 3 USE dom_oce 4 USE iom 4 5 USE isf 6 USE isfutils 5 7 USE phycst 6 8 USE in_out_manager … … 28 30 INTEGER, INTENT(in) :: kt 29 31 ! 30 ! ice shelf cavity contribution31 IF ( ln_isfcav_mlt ) CALL isf_hdiv_mlt(misfkt_cav, misfkb_cav, rhisf_tbl_cav, rfrac_tbl_cav, fwfisf_cav, fwfisf_cav_b, phdiv)32 IF (lwp) WRITE(numout,*) ' isfdiv start' 33 FLUSH(numout) 32 34 ! 33 ! ice shelf parametrisation contribution 34 IF ( ln_isfpar_mlt ) CALL isf_hdiv_mlt(misfkt_par, misfkb_par, rhisf_tbl_par, rfrac_tbl_par, fwfisf_par, fwfisf_par_b, phdiv) 35 IF ( ln_isf ) THEN 36 ! 37 ! ice shelf cavity contribution 38 IF ( ln_isfcav_mlt ) CALL isf_hdiv_mlt(misfkt_cav, misfkb_cav, rhisf_tbl_cav, rfrac_tbl_cav, fwfisf_cav, fwfisf_cav_b, phdiv) 39 ! 40 ! ice shelf parametrisation contribution 41 IF ( ln_isfpar_mlt ) CALL isf_hdiv_mlt(misfkt_par, misfkb_par, rhisf_tbl_par, rfrac_tbl_par, fwfisf_par, fwfisf_par_b, phdiv) 42 ! 43 END IF 35 44 ! 36 45 ! ice sheet coupling contribution (if conservation needed) … … 38 47 ! 39 48 ! correct divergence only for the first time step 40 IF ( kt == nit000 ) CALL isf_hdiv_cpl(risfcpl_vol, phdiv)49 !IF ( kt == nit000 ) CALL isf_hdiv_cpl(risfcpl_vol, phdiv) 41 50 ! 42 51 ! correct divergence every time step to remove any trend due to coupling 43 IF ( ll_isfcpl_cons ) CALL isf_hdiv_cpl(risfcpl_cons_vol, phdiv)52 IF ( ll_isfcpl_cons ) CALL isf_hdiv_cpl(risfcpl_cons_vol, risfcpl_cons_vol_b, phdiv) 44 53 ! 45 54 END IF 55 IF (lwp) WRITE(numout,*) ' isfdiv end' 56 FLUSH(numout) 46 57 ! 47 58 END SUBROUTINE isf_hdiv … … 78 89 DO jj = 1,jpj 79 90 DO ji = 1,jpi 80 81 82 83 84 85 86 87 91 ikt = ktop(ji,jj) 92 ikb = kbot(ji,jj) 93 ! level fully include in the ice shelf boundary layer 94 DO jk = ikt, ikb - 1 95 phdiv(ji,jj,jk) = phdiv(ji,jj,jk) + zqvol(ji,jj) 96 END DO 97 ! level partially include in ice shelf boundary layer 98 phdiv(ji,jj,ikb) = phdiv(ji,jj,ikb) + zqvol(ji,jj) * pfrac(ji,jj) 88 99 END DO 89 100 END DO … … 91 102 END SUBROUTINE isf_hdiv_mlt 92 103 93 SUBROUTINE isf_hdiv_cpl(pqvol, phdiv) 104 SUBROUTINE isf_hdiv_cpl(pqvol, pqvol_b, phdiv) 105 !!---------------------------------------------------------------------- 106 !! *** SUBROUTINE isf_hdiv_cpl *** 107 !! 108 !! ** Purpose : 109 !! 110 !! ** Method : 111 !! 112 !! ** Action : 113 !!---------------------------------------------------------------------- 94 114 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: phdiv 95 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in ) :: pqvol 96 97 INTEGER :: jk 98 115 !!---------------------------------------------------------------------- 116 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in ) :: pqvol, pqvol_b 117 !!---------------------------------------------------------------------- 118 INTEGER :: jk 119 !!---------------------------------------------------------------------- 120 ! 99 121 DO jk=1,jpk 100 122 phdiv(:,:,jk) = phdiv(:,:,jk) + pqvol(:,:,jk) * r1_e1e2t(:,:) / e3t_n(:,:,jk) 101 123 END DO 102 103 END SUBROUTINE 124 ! 125 END SUBROUTINE isf_hdiv_cpl 104 126 105 127 END MODULE isfhdiv -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isfnxt.F90
r11403 r11521 42 42 IF ( ln_isfpar_mlt ) CALL isf_dynnxt_mlt(misfkt_par, misfkb_par, rhisf_tbl_par, rfrac_tbl_par, fwfisf_par, fwfisf_par_b, pcoef) 43 43 ! 44 ! ice sheet coupling45 !IF ( ln_iscpl_hsb ) CALL isf_dynnxt_cpl(...zcoef)46 !47 44 END SUBROUTINE isf_dynnxt 48 45 -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isfparmlt.F90
r11495 r11521 148 148 ! 3. ------------BG03 output 149 149 ! output ttbl 150 CALL iom_put('ttbl_par', ztavg(:,:) )150 CALL iom_put('ttbl_par', ztavg(:,:) * mskisf_par(:,:) ) 151 151 ! 152 152 ! output thermal driving 153 CALL iom_put('isfthermald_par',( ztfrz(:,:) - ztavg(:,:) ) )153 CALL iom_put('isfthermald_par',( ztfrz(:,:) - ztavg(:,:) ) * mskisf_par(:,:)) 154 154 ! 155 155 ! -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isfstp.F90
r11489 r11521 33 33 USE isfcpl ! isf variables 34 34 USE isf ! isf variables 35 USE isfutils 35 36 36 37 IMPLICIT NONE … … 103 104 END IF 104 105 105 IF ( ln_isfcpl ) THEN 106 IF ( ll_isfcpl ) THEN 107 106 108 IF (lrst_oce) CALL isfcpl_rst_write(kt) 109 107 110 END IF 108 111 ! … … 181 184 WRITE(numout,*) '' 182 185 ! 183 WRITE(numout,*) ' Coupling to an ice sheet model ln_isfcpl = ', ln_isfcpl184 IF ( ln_isfcpl ) THEN185 WRITE(numout,*) ' conservation activated ln_isfcpl_cons = ', ln_isfcpl_cons186 WRITE(numout,*) ' number of call of the extrapolation loop = ', nn_drown187 ENDIF188 !189 WRITE(numout,*) ' Ice shelf load method cn_isfload = ', TRIM(cn_isfload)190 186 ELSE 191 187 IF ( ln_isfcav ) THEN … … 196 192 END IF 197 193 194 WRITE(numout,*) ' Coupling to an ice sheet model ln_isfcpl = ', ln_isfcpl 195 IF ( ln_isfcpl ) THEN 196 WRITE(numout,*) ' conservation activated ln_isfcpl_cons = ', ln_isfcpl_cons 197 WRITE(numout,*) ' number of call of the extrapolation loop = ', nn_drown 198 ENDIF 199 ! 200 IF (ln_isfcav) WRITE(numout,*) ' Ice shelf load method cn_isfload = ', TRIM(cn_isfload) 201 WRITE(numout,*) '' 202 198 203 END IF 199 204 ! … … 244 249 ! 245 250 ! terminate routine now if no ice shelf melt formulation specify 246 IF ( .NOT. ln_isf ) RETURN 247 ! 248 ! initialisation useful variable 249 r1_Lfusisf = 1._wp / rLfusisf 251 IF ( ln_isf ) THEN 252 ! 253 ! initialisation useful variable 254 r1_Lfusisf = 1._wp / rLfusisf 255 ! 256 ! initialisation melt in the cavity 257 IF ( ln_isfcav_mlt ) THEN 258 ! 259 ! initialisation of cav variable 260 CALL isf_cav_init() 261 ! 262 ! read cav variable from restart 263 IF ( ln_rstart ) CALL isfrst_read('cav', risf_cav_tsc, fwfisf_cav, risf_cav_tsc_b, fwfisf_cav_b) 264 ! 265 END IF 266 ! 267 !--------------------------------------------------------------------------------------------------------------------- 268 ! initialisation parametrised melt 269 IF ( ln_isfpar_mlt ) THEN 270 ! 271 ! initialisation of par variable 272 CALL isf_par_init() 273 ! 274 ! read par variable from restart 275 IF ( ln_rstart ) CALL isfrst_read('par', risf_par_tsc, fwfisf_par, risf_par_tsc_b, fwfisf_par_b) 276 ! 277 END IF 278 END IF 279 ! 280 !--------------------------------------------------------------------------------------------------------------------- 281 ! initialisation ice sheet coupling 250 282 ! 251 283 ll_isfcpl = .FALSE. 252 284 ll_isfcpl_cons= .FALSE. 253 285 ! 254 ! initialisation melt in the cavity255 IF ( ln_isfcav_mlt ) THEN256 !257 ! initialisation of cav variable258 CALL isf_cav_init()259 !260 ! read cav variable from restart261 IF ( ln_rstart ) CALL isfrst_read('cav', risf_cav_tsc, fwfisf_cav, risf_cav_tsc_b, fwfisf_cav_b)262 !263 END IF264 !265 !---------------------------------------------------------------------------------------------------------------------266 ! initialisation parametrised melt267 IF ( ln_isfpar_mlt ) THEN268 !269 ! initialisation of par variable270 CALL isf_par_init()271 !272 ! read par variable from restart273 IF ( ln_rstart ) CALL isfrst_read('par', risf_par_tsc, fwfisf_par, risf_par_tsc_b, fwfisf_par_b)274 !275 END IF276 !277 !---------------------------------------------------------------------------------------------------------------------278 ! initialisation ice sheet coupling279 286 IF( ln_isfcpl ) THEN 280 287 -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isftbl.F90
r11495 r11521 98 98 ! 99 99 END SELECT 100 !101 ! mask mean tbl value102 pvarout(:,:) = pvarout(:,:) * ssmask(:,:)103 100 ! 104 101 END SUBROUTINE isf_tbl -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isfutils.F90
r11494 r11521 65 65 !!-------------------------------------------------------------------- 66 66 ! 67 zsum = glob_sum ( 'debug', pvar(:,:) )67 zsum = glob_sum_full( 'debug', pvar(:,:) ) 68 68 zmin = MINVAL( pvar(:,:) ) ; CALL mpp_min( 'debug', zmin ) ! min over the global domain 69 69 zmax = MAXVAL( pvar(:,:) ) ; CALL mpp_max( 'debug', zmax ) ! max over the global domain … … 89 89 !!-------------------------------------------------------------------- 90 90 ! 91 zsum = glob_sum ( 'debug', pvar(:,:) )92 zmin = MINVAL( pvar(:,: ) ) ; CALL mpp_min( 'debug', zmin ) ! min over the global domain93 zmax = MAXVAL( pvar(:,: ) ) ; CALL mpp_max( 'debug', zmax ) ! max over the global domain91 zsum = glob_sum_full( 'debug', pvar(:,:,:) ) 92 zmin = MINVAL( pvar(:,:,:) ) ; CALL mpp_min( 'debug', zmin ) ! min over the global domain 93 zmax = MAXVAL( pvar(:,:,:) ) ; CALL mpp_max( 'debug', zmax ) ! max over the global domain 94 94 ! 95 95 WRITE(numout,*) TRIM(cdtxt),' (min, max, sum) : ',zmin, zmax, zsum -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/SBC/sbc_oce.F90
r11403 r11521 43 43 LOGICAL , PUBLIC :: ln_dm2dc !: Daily mean to Diurnal Cycle short wave (qsr) 44 44 LOGICAL , PUBLIC :: ln_rnf !: runoffs / runoff mouths 45 LOGICAL , PUBLIC :: ln_isf !: ice shelf melting46 45 LOGICAL , PUBLIC :: ln_ssr !: Sea Surface restoring on SST and/or SSS 47 46 LOGICAL , PUBLIC :: ln_apr_dyn !: Atmospheric pressure forcing used on dynamics (ocean & ice) -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/SBC/sbccpl.F90
r11423 r11521 36 36 USE eosbn2 ! 37 37 USE sbcrnf , ONLY : l_rnfcpl 38 USE isf , ONLY : l _isfoasis, fwfisf_oasis38 USE isf , ONLY : ln_isf, l_isfoasis, fwfisf_oasis 39 39 #if defined key_cice 40 40 USE ice_domain_size, only: ncat -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/TRA/traisf.F90
r11423 r11521 48 48 IF( ln_timing ) CALL timing_start('tra_sbc') 49 49 ! 50 ! cavity case 51 IF ( ln_isfcav_mlt ) CALL tra_isf_mlt(misfkt_cav, misfkb_cav, rhisf_tbl_cav, rfrac_tbl_cav, risf_cav_tsc, risf_cav_tsc_b, tsa) 52 ! 53 ! parametrisation case 54 IF ( ln_isfpar_mlt ) CALL tra_isf_mlt(misfkt_par, misfkb_par, rhisf_tbl_par, rfrac_tbl_par, risf_par_tsc, risf_par_tsc_b, tsa) 50 IF (ln_isf) THEN 51 ! 52 ! cavity case 53 IF ( ln_isfcav_mlt ) CALL tra_isf_mlt(misfkt_cav, misfkb_cav, rhisf_tbl_cav, rfrac_tbl_cav, risf_cav_tsc, risf_cav_tsc_b, tsa) 54 ! 55 ! parametrisation case 56 IF ( ln_isfpar_mlt ) CALL tra_isf_mlt(misfkt_par, misfkb_par, rhisf_tbl_par, rfrac_tbl_par, risf_par_tsc, risf_par_tsc_b, tsa) 57 ! 58 END IF 55 59 ! 56 60 ! ice sheet coupling case 57 IF ( ll_isfcpl .AND. kt == nit000 ) CALL tra_isf_cpl(risfcpl_tsc, tsa) 58 ! 59 ! ice sheet coupling case ( 60 IF ( ll_isfcpl_cons ) CALL tra_isf_cpl(risfcpl_cons_tsc, tsa) 61 IF ( ll_isfcpl ) THEN 62 ! 63 IF ( kt == nit000 ) CALL tra_isf_cpl(risfcpl_tsc, tsa) 64 ! 65 ! ensure 0 trend due to unconservation of the ice shelf coupling 66 IF ( ll_isfcpl_cons ) CALL tra_isf_cpl(risfcpl_cons_tsc, tsa) 67 ! 68 END IF 61 69 ! 62 70 IF( ln_timing ) CALL timing_stop('tra_isf') … … 95 103 ! 96 104 ! level fully include in the ice shelf boundary layer 97 ! sign - because fwf sign of evapo (rnf sign of precip)98 105 DO jk = ikt, ikb - 1 99 106 pts(ji,jj,jk,jp_tem) = pts(ji,jj,jk,jp_tem) + ztc(ji,jj) … … 117 124 REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(inout) :: ptsa 118 125 !!---------------------------------------------------------------------- 119 REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(in ) :: ptsc !( >0 out )126 REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(in ) :: ptsc 120 127 !!---------------------------------------------------------------------- 121 128 INTEGER :: jk -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/step.F90
r11403 r11521 39 39 ! 40 40 USE iom ! xIOs server 41 USE isf 41 42 42 43 IMPLICIT NONE … … 113 114 IF( ln_apr_dyn ) CALL sbc_apr ( kstp ) ! atmospheric pressure (NB: call before bdy_dta which needs ssh_ib) 114 115 IF( ln_bdy ) CALL bdy_dta ( kstp, time_offset=+1 ) ! update dynamic & tracer data at open boundaries 115 IF( ln_isf ) CALL isf_stp ( kstp )116 IF( ln_isf .OR. ll_isfcpl ) CALL isf_stp ( kstp ) 116 117 CALL sbc ( kstp ) ! Sea Boundary Condition (including sea-ice) 117 118 … … 241 242 CALL tra_sbc ( kstp ) ! surface boundary condition 242 243 IF( ln_traqsr ) CALL tra_qsr ( kstp ) ! penetrative solar radiation qsr 243 IF( ln_isf )CALL tra_isf ( kstp ) ! ice shelf heat flux244 IF( ln_isf .OR. ll_isfcpl ) CALL tra_isf ( kstp ) ! ice shelf heat flux 244 245 IF( ln_trabbc ) CALL tra_bbc ( kstp ) ! bottom heat flux 245 246 IF( ln_trabbl ) CALL tra_bbl ( kstp ) ! advective (and/or diffusive) bottom boundary layer scheme
Note: See TracChangeset
for help on using the changeset viewer.