Changeset 11423 for NEMO/branches
- Timestamp:
- 2019-08-08T16:02:49+02:00 (5 years ago)
- Location:
- NEMO/branches/2019/ENHANCE-02_ISF_nemo
- Files:
-
- 3 deleted
- 17 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/ENHANCE-02_ISF_nemo/cfgs/SHARED/namelist_ref
r11395 r11423 436 436 &namisf ! Top boundary layer (ISF) (ln_isf = T .AND. ln_isfcav: read (ln_read_cfg=T) 437 437 !----------------------------------------------------------------------- or set or usr_def_zgr ) 438 ! ! type of top boundary layer 438 cn_isfdir = './' 439 cn_isfload = 'isomip' 440 439 441 ln_isfcav_mlt = .false. ! ice shelf melting into the cavity 440 442 cn_isfcav_mlt = '3eq' ! ice shelf melting formulation (spe/2eq/3eq/oasis) … … 458 460 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! 459 461 sn_isfcav_fwf = 'isfmlt_cav', -12 , 'fwflisf' , .false. , .true. , 'yearly' , '' , '' , '' 460 ! 461 ! 462 463 462 464 ln_isfpar_mlt = .false. ! ice shelf melting parametrised 463 465 cn_isfpar_mlt = 'spe' ! ice shelf melting parametrisation (spe/bg03/oasis) … … 473 475 !* 'bg03' case 474 476 sn_isfpar_Leff = 'isfmlt_par', 0 ,'Leff' , .false. , .true. , 'yearly' , '' , '' , '' 475 ! 476 ! 477 !ln_iscpl = .false. 478 ! nn_drown = 10 ! number of iteration of the extrapolation loop (fill the new wet cells) 479 ! ln_hsb = .false. ! activate conservation module (conservation exact after a time of rn_fiscpl) 480 ! nn_fiscpl = 43800 ! (number of time step) conservation period (maybe should be fix to the coupling frequencey of restart frequency) 477 478 479 ln_isfcpl = .false. 480 nn_drown = 10 ! number of iteration of the extrapolation loop (fill the new wet cells) 481 ln_isfcpl_cons = .false. 481 482 / 482 483 !----------------------------------------------------------------------- -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/DIA/diawri.F90
r11395 r11423 906 906 CALL iom_rstput( 0, 0, inum, 'vovecrtz', wn ) ! now k-velocity 907 907 CALL iom_rstput( 0, 0, inum, 'risfdep', risfdep ) ! now k-velocity 908 CALL iom_rstput( 0, 0, inum, 'fwfisf_cav', fwfisf_cav ) ! now k-velocity 909 CALL iom_rstput( 0, 0, inum, 'rhisf_cav_tbl', rhisf_tbl_cav ) ! now k-velocity 910 CALL iom_rstput( 0, 0, inum, 'rfrac_cav_tbl', rfrac_tbl_cav ) ! now k-velocity 911 CALL iom_rstput( 0, 0, inum, 'misfkb_cav', REAL(misfkb_cav,8) ) ! now k-velocity 912 CALL iom_rstput( 0, 0, inum, 'misfkt_cav', REAL(misfkt_cav,8) ) ! now k-velocity 913 CALL iom_rstput( 0, 0, inum, 'fwfisf_par', fwfisf_par ) ! now k-velocity 914 CALL iom_rstput( 0, 0, inum, 'rhisf_par_tbl', rhisf_tbl_par ) ! now k-velocity 915 CALL iom_rstput( 0, 0, inum, 'rfrac_par_tbl', rfrac_tbl_par ) ! now k-velocity 916 CALL iom_rstput( 0, 0, inum, 'misfkb_par', REAL(misfkb_par,8) ) ! now k-velocity 917 CALL iom_rstput( 0, 0, inum, 'misfkt_par', REAL(misfkt_par,8) ) ! now k-velocity 908 IF ( ln_isf ) THEN 909 IF (ln_isfcav_mlt) THEN 910 CALL iom_rstput( 0, 0, inum, 'fwfisf_cav', fwfisf_cav ) ! now k-velocity 911 CALL iom_rstput( 0, 0, inum, 'rhisf_cav_tbl', rhisf_tbl_cav ) ! now k-velocity 912 CALL iom_rstput( 0, 0, inum, 'rfrac_cav_tbl', rfrac_tbl_cav ) ! now k-velocity 913 CALL iom_rstput( 0, 0, inum, 'misfkb_cav', REAL(misfkb_cav,8) ) ! now k-velocity 914 CALL iom_rstput( 0, 0, inum, 'misfkt_cav', REAL(misfkt_cav,8) ) ! now k-velocity 915 END IF 916 IF (ln_isfpar_mlt) THEN 917 CALL iom_rstput( 0, 0, inum, 'fwfisf_par', fwfisf_par ) ! now k-velocity 918 CALL iom_rstput( 0, 0, inum, 'rhisf_par_tbl', rhisf_tbl_par ) ! now k-velocity 919 CALL iom_rstput( 0, 0, inum, 'rfrac_par_tbl', rfrac_tbl_par ) ! now k-velocity 920 CALL iom_rstput( 0, 0, inum, 'misfkb_par', REAL(misfkb_par,8) ) ! now k-velocity 921 CALL iom_rstput( 0, 0, inum, 'misfkt_par', REAL(misfkt_par,8) ) ! now k-velocity 922 END IF 923 END IF 918 924 IF( ALLOCATED(ahtu) ) THEN 919 925 CALL iom_rstput( 0, 0, inum, 'ahtu', ahtu ) ! aht at u-point -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/DOM/domvvl.F90
r10425 r11423 19 19 !!---------------------------------------------------------------------- 20 20 USE oce ! ocean dynamics and tracers 21 USE isfcpl 21 22 USE phycst ! physical constant 22 23 USE dom_oce ! ocean space and time domain … … 813 814 id4 = iom_varid( numror, 'tilde_e3t_n', ldstop = .FALSE. ) 814 815 id5 = iom_varid( numror, 'hdiv_lf', ldstop = .FALSE. ) 816 ! 817 ! coupling with an ice sheet model (grounding/calving line migration) 818 IF ( ln_iscpl ) THEN 819 ! 820 ! extrapolate ssh over new water column if needed 821 CALL isfcpl_ssh() 822 ! 823 ! everything need to compute over new water column 824 id1 = 0 ; id2 = 0 ; id3 = 0 ; id4 = 0 ; id5 = 0 825 ! 826 END IF 815 827 ! ! --------- ! 816 828 ! ! all cases ! -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/DOM/istate.F90
r10499 r11423 28 28 USE dtauvd ! data: U & V current (dta_uvd routine) 29 29 USE domvvl ! varying vertical mesh 30 USE iscplrst ! ice sheet coupling31 30 USE wet_dry ! wetting and drying (needed for wad_istate) 32 31 USE usrdef_istate ! User defined initial state … … 86 85 ! ! ------------------- 87 86 CALL rst_read ! Read the restart file 88 IF (ln_iscpl) CALL iscpl_stp ! extrapolate restart to wet and dry89 87 CALL day_init ! model calendar (using both namelist and restart infos) 90 88 ! -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/DYN/divhor.F90
r11395 r11423 23 23 USE sbcrnf ! river runoff 24 24 USE isfhdiv ! ice shelf 25 USE iscplhsb ! ice sheet / ocean coupling26 USE iscplini ! ice sheet / ocean coupling27 25 #if defined key_asminc 28 26 USE asminc ! Assimilation increment … … 100 98 ! 101 99 #endif 102 IF( ln_isf ) CALL isf_hdiv( hdivn ) !== ice shelf ==! (update hdivn field)100 IF( ln_isf ) CALL isf_hdiv( kt, hdivn ) !== ice shelf ==! (update hdivn field) 103 101 ! 104 102 CALL lbc_lnk( 'divhor', hdivn, 'T', 1. ) ! (no sign change) -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isf.F90
r11403 r11423 22 22 PRIVATE 23 23 24 PUBLIC isf_alloc, isf_alloc_par, isf_alloc_cav 25 26 ! public in order to be able to output then 27 28 LOGICAL, PUBLIC :: ln_isfpar_mlt !: logical for the computation of melt inside the cavity 29 LOGICAL, PUBLIC :: ln_isfcav_mlt !: logical for the use of ice shelf parametrisation 30 REAL(wp), PUBLIC :: rn_hisf_tbl !: thickness of top boundary layer [m] 31 REAL(wp), PUBLIC :: rn_gammat0 !: temperature exchange coeficient [] 32 REAL(wp), PUBLIC :: rn_gammas0 !: salinity exchange coeficient [] 33 REAL(wp), PUBLIC :: rn_htbl !: Losch top boundary layer thickness [m] 34 CHARACTER(LEN=256), PUBLIC :: cn_isfload !: ice shelf load computation method 35 CHARACTER(LEN=256), PUBLIC :: cn_gammablk !: gamma formulation 36 CHARACTER(LEN=256), PUBLIC :: cn_isfcav_mlt, cn_isfpar_mlt !: melt formulation (cavity/param) 37 TYPE(FLD_N), PUBLIC :: sn_isfcav_fwf !: information about the isf melting file to be read 38 TYPE(FLD_N), PUBLIC :: sn_isfpar_fwf !: information about the isf melting file to be read 39 TYPE(FLD_N), PUBLIC :: sn_isfpar_zmax !: information about the grounding line depth file to be read 40 TYPE(FLD_N), PUBLIC :: sn_isfpar_zmin !: information about the calving line depth file to be read 41 TYPE(FLD_N), PUBLIC :: sn_isfpar_Leff !: information about the effective length file to be read 42 43 LOGICAL, PUBLIC :: l_isfcpl 44 ! 45 INTEGER , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: misfkt_par, misfkt_cav !: Level of ice shelf base 46 INTEGER , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: misfkb_par, misfkb_cav !: Level of ice shelf base 47 ! 48 INTEGER , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: mskisf_par, mskisf_cav !: Level of ice shelf base 49 ! 50 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: risfload !: ice shelf load 51 ! 52 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rhisf_tbl_0 !: thickness of tbl (initial value) [m] 53 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rhisf_tbl_cav, rhisf_tbl_par !: thickness of tbl [m] 54 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rfrac_tbl_cav, rfrac_tbl_par !: fraction of the deepest cell affect by isf tbl [] 55 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rhisf0_tbl_par 56 ! 57 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fwfisf_cpl 58 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fwfisf_par, fwfisf_par_b !: net fwf from the ice shelf [kg/m2/s] 59 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fwfisf_cav, fwfisf_cav_b !: net fwf from the ice shelf [kg/m2/s] 60 ! 61 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: risfLeff 62 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: risf_cav_tsc_b, risf_cav_tsc !: before and now T & S isf contents [K.m/s & PSU.m/s] 63 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: risf_par_tsc_b, risf_par_tsc !: before and now T & S isf contents [K.m/s & PSU.m/s] 64 24 PUBLIC isf_alloc, isf_alloc_par, isf_alloc_cav, isf_alloc_cpl 25 ! 26 !------------------------------------------------------- 27 ! 0 : namelist parameter 28 !------------------------------------------------------- 29 ! 30 ! 0.1 -------- ice shelf cavity parameter -------------- 31 CHARACTER(LEN=256), PUBLIC :: cn_isfdir 32 CHARACTER(LEN=256), PUBLIC :: cn_isfload !: ice shelf load computation method 33 ! 34 ! 0.2 -------- ice shelf cavity melt namelist parameter ------------- 35 LOGICAL , PUBLIC :: ln_isfcav_mlt !: logical for the use of ice shelf parametrisation 36 REAL(wp) , PUBLIC :: rn_gammat0 !: temperature exchange coeficient [] 37 REAL(wp) , PUBLIC :: rn_gammas0 !: salinity exchange coeficient [] 38 REAL(wp) , PUBLIC :: rn_htbl !: Losch top boundary layer thickness [m] 39 CHARACTER(LEN=256), PUBLIC :: cn_gammablk !: gamma formulation 40 CHARACTER(LEN=256), PUBLIC :: cn_isfcav_mlt !: melt formulation (cavity/param) 41 TYPE(FLD_N) , PUBLIC :: sn_isfcav_fwf !: information about the isf melting file to be read 42 ! 43 ! 0.3 -------- ice shelf param. melt namelist parameter ------------- 44 LOGICAL , PUBLIC :: ln_isfpar_mlt !: logical for the computation of melt inside the cavity 45 CHARACTER(LEN=256), PUBLIC :: cn_isfpar_mlt !: melt formulation (cavity/param) 46 TYPE(FLD_N) , PUBLIC :: sn_isfpar_fwf !: information about the isf melting file to be read 47 TYPE(FLD_N) , PUBLIC :: sn_isfpar_zmax !: information about the grounding line depth file to be read 48 TYPE(FLD_N) , PUBLIC :: sn_isfpar_zmin !: information about the calving line depth file to be read 49 TYPE(FLD_N) , PUBLIC :: sn_isfpar_Leff !: information about the effective length file to be read 50 ! 51 ! 0.4 -------- coupling namelist parameter ------------- 52 LOGICAL, PUBLIC :: ln_isfcpl !: 53 LOGICAL, PUBLIC :: ln_isfcpl_cons !: 54 INTEGER, PUBLIC :: nn_drown !: 55 ! 56 !------------------------------------------------------- 57 ! 1 : ice shelf parameter 58 !------------------------------------------------------- 59 ! 65 60 REAL(wp), PARAMETER, PUBLIC :: rLfusisf = 0.334e6_wp !: latent heat of fusion of ice shelf [J/kg] 66 61 REAL(wp), PARAMETER, PUBLIC :: rcpisf = 2000.0_wp !: specific heat of ice shelf [J/kg/K] … … 68 63 REAL(wp), PARAMETER, PUBLIC :: rhoisf = 920.0_wp !: volumic mass of ice shelf [kg/m3] 69 64 REAL(wp), PARAMETER, PUBLIC :: rtsurf = -20.0 !: surface temperature [C] 70 REAL(wp), PARAMETER, PUBLIC :: risf_eps = 1.e-20_wp 71 72 REAL(wp), PUBLIC :: risf_lamb1, risf_lamb2, risf_lamb3 ! freezing point linearization coeficient 73 65 ! 66 !------------------------------------------------------- 67 ! 2 : ice shelf global variables 68 !------------------------------------------------------- 69 ! 70 ! 0.1 -------- ice shelf cavity parameter -------------- 71 LOGICAL , PUBLIC :: l_isfoasis 74 72 REAL(wp), PUBLIC :: r1_Lfusisf !: 1/rLfusisf 75 76 TYPE(FLD) , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: sf_isfcav_fwf 77 TYPE(FLD) , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: sf_isfpar_fwf 78 79 !: Variable used in fldread to read the forcing file (nn_isf == 4 .OR. nn_isf == 3) 80 CHARACTER(len=100), PUBLIC :: cn_dirisf = './' !: Root directory for location of ssr files 81 TYPE(FLD_N) , PUBLIC :: sn_fwfisf !: information about the isf melting file to be read 82 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_fwfisf 83 TYPE(FLD_N) , PUBLIC :: sn_rnfisf !: information about the isf melting param. file to be read 84 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_rnfisf 85 73 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: risfload !: ice shelf load 74 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fwfisf_oasis 75 ! 76 ! 0.2 -------- ice shelf cavity melt namelist parameter ------------- 77 INTEGER , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: mskisf_cav !: 78 INTEGER , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: misfkt_cav , misfkb_cav !: 79 REAL(wp) , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rhisf_tbl_cav, rfrac_tbl_cav !: 80 REAL(wp) , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fwfisf_cav , fwfisf_cav_b !: before and now net fwf from the ice shelf [kg/m2/s] 81 REAL(wp) , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: risf_cav_tsc , risf_cav_tsc_b !: before and now T & S isf contents [K.m/s & PSU.m/s] 82 TYPE(FLD), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: sf_isfcav_fwf !: 83 ! 84 REAL(wp) , PUBLIC :: risf_lamb1, risf_lamb2, risf_lamb3 ! freezing point linearization coeficient 85 ! 86 ! 0.3 -------- ice shelf param. melt namelist parameter ------------- 87 INTEGER , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: mskisf_par !: 88 INTEGER , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: misfkt_par , misfkb_par !: 89 REAL(wp) , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rhisf_tbl_par, rfrac_tbl_par !: 90 REAL(wp) , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fwfisf_par , fwfisf_par_b !: before and now net fwf from the ice shelf [kg/m2/s] 91 REAL(wp) , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: risf_par_tsc , risf_par_tsc_b !: before and now T & S isf contents [K.m/s & PSU.m/s] 92 TYPE(FLD), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: sf_isfpar_fwf !: 93 ! 94 REAL(wp) , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rhisf0_tbl_par !: thickness of tbl (initial value) [m] 95 REAL(wp) , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: risfLeff !: 96 ! 97 ! 0.4 -------- coupling namelist parameter ------------- 98 LOGICAL , PUBLIC :: ll_isfcpl !: 99 LOGICAL , PUBLIC :: ll_isfcpl_cons !: 100 INTEGER , PUBLIC :: nstp_iscpl !: 101 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 !: 104 ! 86 105 !!---------------------------------------------------------------------- 87 106 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 121 140 CALL mpp_sum ( 'isf', ierr ) 122 141 IF( ierr /= 0 ) CALL ctl_stop( 'STOP', 'isf: failed to allocate arrays.' ) 142 ! 123 143 END SUBROUTINE isf_alloc_par 124 144 … … 145 165 ierr = ierr + ialloc 146 166 ! 167 CALL mpp_sum ( 'isf', ierr ) 168 IF( ierr /= 0 ) CALL ctl_stop( 'STOP', 'isf: failed to allocate arrays.' ) 169 ! 170 END SUBROUTINE isf_alloc_cav 171 172 SUBROUTINE isf_alloc_cpl() 173 !!--------------------------------------------------------------------- 174 !! *** ROUTINE isf_alloc_cpl *** 175 !! 176 !! ** Purpose : 177 !! 178 !! ** Method : 179 !! 180 !!---------------------------------------------------------------------- 181 INTEGER :: ierr, ialloc 182 !!---------------------------------------------------------------------- 183 ierr = 0 184 ! 185 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 ) 187 ierr = ierr + ialloc 188 ! 189 CALL mpp_sum ( 'isf', ierr ) 190 IF( ierr /= 0 ) CALL ctl_warn('STOP','isfcpl: failed to allocate arrays.') 191 ! 192 END SUBROUTINE isf_alloc_cpl 193 194 SUBROUTINE isf_alloc() 195 !!--------------------------------------------------------------------- 196 !! *** ROUTINE isf_alloc *** 197 !! 198 !! ** Purpose : 199 !! 200 !! ** Method : 201 !! 202 !!---------------------------------------------------------------------- 203 INTEGER :: ierr, ialloc 204 !!---------------------------------------------------------------------- 205 ! 206 ierr = 0 ! set to zero if no array to be allocated 207 ! 208 ALLOCATE(fwfisf_par(jpi,jpj) , fwfisf_par_b(jpi,jpj), & 209 & fwfisf_cav(jpi,jpj) , fwfisf_cav_b(jpi,jpj), & 210 & fwfisf_oasis(jpi,jpj), STAT=ialloc ) 211 ierr = ierr + ialloc 212 ! 213 ALLOCATE(risf_par_tsc(jpi,jpj,jpts), risf_par_tsc_b(jpi,jpj,jpts), STAT=ialloc ) 214 ierr = ierr + ialloc 215 ! 216 ALLOCATE(risf_cav_tsc(jpi,jpj,jpts), risf_cav_tsc_b(jpi,jpj,jpts), STAT=ialloc ) 217 ierr = ierr + ialloc 218 ! 219 ALLOCATE(risfload(jpi,jpj), STAT=ialloc) 220 ierr = ierr + ialloc 221 ! 147 222 ALLOCATE( mskisf_cav(jpi,jpj), STAT=ialloc) 148 223 ierr = ierr + ialloc … … 150 225 CALL mpp_sum ( 'isf', ierr ) 151 226 IF( ierr /= 0 ) CALL ctl_stop( 'STOP', 'isf: failed to allocate arrays.' ) 152 END SUBROUTINE isf_alloc_cav153 154 SUBROUTINE isf_alloc()155 !!---------------------------------------------------------------------156 !! *** ROUTINE isf_alloc ***157 !!158 !! ** Purpose :159 !!160 !! ** Method :161 !!162 !!----------------------------------------------------------------------163 INTEGER :: ierr, ialloc164 !!----------------------------------------------------------------------165 !166 ierr = 0 ! set to zero if no array to be allocated167 !168 ALLOCATE(fwfisf_par(jpi,jpj), fwfisf_par_b(jpi,jpj), &169 & fwfisf_cav(jpi,jpj), fwfisf_cav_b(jpi,jpj), &170 & fwfisf_cpl(jpi,jpj), STAT=ialloc )171 ierr = ierr + ialloc172 !173 ALLOCATE(risf_par_tsc(jpi,jpj,jpts), risf_par_tsc_b(jpi,jpj,jpts), STAT=ialloc )174 ierr = ierr + ialloc175 !176 ALLOCATE(risf_cav_tsc(jpi,jpj,jpts), risf_cav_tsc_b(jpi,jpj,jpts), STAT=ialloc )177 ierr = ierr + ialloc178 !179 ALLOCATE(risfload(jpi,jpj), STAT=ialloc)180 ierr = ierr + ialloc181 !182 CALL mpp_sum ( 'isf', ierr )183 IF( ierr /= 0 ) CALL ctl_stop( 'STOP', 'isf: failed to allocate arrays.' )184 227 185 228 END SUBROUTINE isf_alloc 186 ! 229 187 230 END MODULE isf -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isfcav.F90
r11403 r11423 17 17 USE isftbl ! 18 18 USE isfcavmlt 19 USE isf gammats19 USE isfcavgam 20 20 USE isfdiags 21 21 USE dom_oce ! ocean space and time domain 22 22 USE phycst ! physical constants 23 USE eosbn2 ! equation of state 24 USE zdfdrg ! vertical physics: top/bottom drag coef. 23 USE eosbn2 ! l_useCT 25 24 ! 26 25 USE in_out_manager ! I/O manager … … 166 165 ALLOCATE( sf_isfcav_fwf(1), STAT=ierr ) 167 166 ALLOCATE( sf_isfcav_fwf(1)%fnow(jpi,jpj,1), sf_isfcav_fwf(1)%fdta(jpi,jpj,1,2) ) 168 CALL fld_fill( sf_isfcav_fwf, (/ sn_isfcav_fwf /), cn_ dirisf, 'isf_cav_init', 'read fresh water flux isf data', 'namisf' )167 CALL fld_fill( sf_isfcav_fwf, (/ sn_isfcav_fwf /), cn_isfdir, 'isf_cav_init', 'read fresh water flux isf data', 'namisf' ) 169 168 170 169 IF(lwp) WRITE(numout,*) -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isfcavgam.F90
r11403 r11423 1 MODULE isf gammats1 MODULE isfcavgam 2 2 !!====================================================================== 3 3 !! *** MODULE isfgammats *** … … 229 229 END SUBROUTINE gammats_HJ99 230 230 231 END MODULE isf gammats231 END MODULE isfcavgam -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isfcavmlt.F90
r11403 r11423 198 198 ! solve the 2nd order equation to find zsfrz 199 199 zaqe = risf_lamb1 * (zeps1 + zeps3) 200 zaqer = 0.5_wp/MIN(zaqe,- risf_eps)200 zaqer = 0.5_wp/MIN(zaqe,-zeps) 201 201 zbqe = zeps1*zeps6+zeps3*zeps7-zeps2 202 202 zcqe = zeps2*pstbl(ji,jj) … … 248 248 REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: pstbl ! salinity in tbl 249 249 !!-------------------------------------------------------------------- 250 REAL(wp) :: zfwf_fld, zfwf_ cpl ! total fwf in the forcing fields (pattern) and from the cplinterface (amount)250 REAL(wp) :: zfwf_fld, zfwf_oasis ! total fwf in the forcing fields (pattern) and from the oasis interface (amount) 251 251 REAL(wp), DIMENSION(jpi,jpj) :: ztfrz ! tbl freezing temperature 252 252 REAL(wp), DIMENSION(jpi,jpj) :: zfwf ! 2d fwf map after scaling … … 266 266 ! 267 267 ! compute glob sum from atm->oce ice shelf fwf 268 zfwf_ cpl = glob_sum('isfcav_mlt', fwfisf_cpl(:,:))268 zfwf_oasis = glob_sum('isfcav_mlt', fwfisf_oasis(:,:)) 269 269 ! 270 270 ! scale fwf 271 zfwf(:,:) = zfwf(:,:) * zfwf_ cpl/ zfwf_fld271 zfwf(:,:) = zfwf(:,:) * zfwf_oasis / zfwf_fld 272 272 ! 273 273 ! define fwf and qoce … … 281 281 !SUBROUTINE isfmlt_3eq_frz_ktm1 282 282 ! compute tfrz based on sfrz value at kt-1 (need to be SAVED local array) 283 ! => should reduce error due to linarisation 283 284 ! compute qfwf (eq 24) 284 285 ! compute zqoce, zqlat, zqcon, zqhc -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isfhdiv.F90
r11403 r11423 4 4 USE isf 5 5 USE phycst 6 USE in_out_manager 6 7 7 8 IMPLICIT NONE … … 13 14 CONTAINS 14 15 15 SUBROUTINE isf_hdiv( phdiv )16 SUBROUTINE isf_hdiv( kt, phdiv ) 16 17 !!---------------------------------------------------------------------- 17 18 !! *** SUBROUTINE isf_hdiv *** … … 25 26 REAL(wp), DIMENSION(:,:,:), INTENT( inout ) :: phdiv ! horizontal divergence 26 27 !!---------------------------------------------------------------------- 28 INTEGER, INTENT(in) :: kt 27 29 ! 28 30 ! ice shelf cavity contribution … … 33 35 ! 34 36 ! ice sheet coupling contribution (if conservation needed) 35 !IF ( ln_iscpl_hsb ) CALL isf_hdiv_cpl(hdiv_iscpl, phdivn) 37 IF ( ll_isfcpl ) THEN 38 ! 39 ! correct divergence only for the first time step 40 IF ( kt == nit000 ) CALL isf_hdiv_cpl(risfcpl_vol, phdiv) 41 ! 42 ! 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) 44 ! 45 END IF 36 46 ! 37 47 END SUBROUTINE isf_hdiv … … 81 91 END SUBROUTINE isf_hdiv_mlt 82 92 93 SUBROUTINE isf_hdiv_cpl(pqvol, phdiv) 94 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: phdiv 95 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in ) :: pqvol 96 97 INTEGER :: jk 98 99 DO jk=1,jpk 100 phdiv(:,:,jk) = phdiv(:,:,jk) + pqvol(:,:,jk) * r1_e1e2t(:,:) / e3t_n(:,:,jk) 101 END DO 102 103 END SUBROUTINE 104 83 105 END MODULE isfhdiv -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isfload.F90
r11403 r11423 90 90 ! 91 91 ! !- Surface value + ice shelf gradient 92 risfload = 0._wp ! compute pressure due to ice shelf load92 risfload(:,:) = 0._wp ! compute pressure due to ice shelf load 93 93 DO jj = 1, jpj ! (used to compute hpgi/j for all the level from 1 to miku/v) 94 94 DO ji = 1, jpi ! divided by 2 later 95 95 ikt = mikt(ji,jj) 96 96 ! 97 ! top layer of the ice shelf 98 risfload(ji,jj) = risfload(ji,jj) + (znad + zrhd(ji,jj,1) ) * e3w_n(ji,jj,1) 99 ! 100 ! core layers of the ice shelf 101 DO jk = 2, ikt-1 102 risfload(ji,jj) = risfload(ji,jj) + (2._wp * znad + zrhd(ji,jj,jk-1) + zrhd(ji,jj,jk)) * e3w_n(ji,jj,jk) 103 END DO 104 ! 105 ! deepest part of the ice shelf (between deepest T point and ice/ocean interface 106 risfload(ji,jj) = risfload(ji,jj) + (2._wp * znad + zrhdtop_isf(ji,jj) + zrhd(ji,jj,ikt-1)) & 107 & * ( risfdep(ji,jj) - gdept_n(ji,jj,ikt-1) ) 108 ! 97 IF ( ikt > 1 ) THEN 98 ! 99 ! top layer of the ice shelf 100 risfload(ji,jj) = risfload(ji,jj) + (znad + zrhd(ji,jj,1) ) * e3w_n(ji,jj,1) 101 ! 102 ! core layers of the ice shelf 103 DO jk = 2, ikt-1 104 risfload(ji,jj) = risfload(ji,jj) + (2._wp * znad + zrhd(ji,jj,jk-1) + zrhd(ji,jj,jk)) * e3w_n(ji,jj,jk) 105 END DO 106 ! 107 ! deepest part of the ice shelf (between deepest T point and ice/ocean interface 108 risfload(ji,jj) = risfload(ji,jj) + (2._wp * znad + zrhdtop_isf(ji,jj) + zrhd(ji,jj,ikt-1)) & 109 & * ( risfdep(ji,jj) - gdept_n(ji,jj,ikt-1) ) 110 ! 111 END IF 109 112 END DO 110 113 END DO 111 !112 ! mask it113 risfload(:,:) = risfload(:,:) * mskisf_cav(:,:) ! need to be saved for diaar5114 114 ! 115 115 END SUBROUTINE isf_load_isomip -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isfpar.F90
r11403 r11423 146 146 ALLOCATE( sf_isfpar_fwf(1), STAT=ierr ) 147 147 ALLOCATE( sf_isfpar_fwf(1)%fnow(jpi,jpj,1), sf_isfpar_fwf(1)%fdta(jpi,jpj,1,2) ) 148 CALL fld_fill( sf_isfpar_fwf, (/ sn_isfpar_fwf /), cn_ dirisf, 'isf_par_init', 'read fresh water flux isf data', 'namisf' )148 CALL fld_fill( sf_isfpar_fwf, (/ sn_isfpar_fwf /), cn_isfdir, 'isf_par_init', 'read fresh water flux isf data', 'namisf' ) 149 149 150 150 IF(lwp) WRITE(numout,*) -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isfparmlt.F90
r11403 r11423 162 162 !! 163 163 !! ** Purpose : - read ice shelf melt from forcing file => pattern 164 !! - total amount of fwf is given by sbccpl (fwfisf_ cpl)164 !! - total amount of fwf is given by sbccpl (fwfisf_oasis) 165 165 !! - scale fwf and compute heat fluxes 166 166 !! … … 172 172 !!-------------------------------------------------------------------- 173 173 INTEGER :: jk ! loop index 174 REAL(wp) :: zfwf_fld, zfwf_ cpl! total fwf in the forcing fields (pattern) and from the cpl interface (amount)174 REAL(wp) :: zfwf_fld, zfwf_oasis ! total fwf in the forcing fields (pattern) and from the cpl interface (amount) 175 175 REAL(wp), DIMENSION(jpi,jpj) :: ztfrz ! tbl freezing temperature 176 176 REAL(wp), DIMENSION(jpi,jpj) :: zfwf ! 2d fwf map after scaling … … 195 195 ! 196 196 ! compute glob sum from atm->oce ice shelf fwf 197 zfwf_ cpl = glob_sum('isfcav_mlt', fwfisf_cpl(:,:))197 zfwf_oasis = glob_sum('isfcav_mlt', fwfisf_oasis(:,:)) 198 198 ! 199 199 ! scale fwf 200 zfwf(:,:) = zfwf(:,:) * zfwf_ cpl/ zfwf_fld200 zfwf(:,:) = zfwf(:,:) * zfwf_oasis / zfwf_fld 201 201 ! 202 202 ! define fwf and qoce -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isfrst.F90
r11403 r11423 20 20 PRIVATE 21 21 22 PUBLIC isfrst_read, isfrst_write 22 PUBLIC isfrst_read, isfrst_write ! iceshelf restart read and write 23 23 24 24 !!---------------------------------------------------------------------- -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isfstp.F90
r11403 r11423 31 31 USE isfcav ! ice shelf cavity 32 32 USE isfload ! ice shelf load 33 USE isfcpl ! isf variables 33 34 USE isf ! isf variables 34 35 … … 87 88 ! before time step 88 89 IF ( kt /= nit000 ) THEN 89 risf_par_tsc_b (:,:) = risf_par_tsc (:,:)90 fwfisf_par_b (:,:) = fwfisf_par(:,:)90 risf_par_tsc_b(:,:,:) = risf_par_tsc(:,:,:) 91 fwfisf_par_b (:,:) = fwfisf_par (:,:) 91 92 END IF 92 93 ! … … 100 101 IF (lrst_oce) CALL isfrst_write(kt, 'par', risf_par_tsc, fwfisf_par) 101 102 ! 103 END IF 104 105 IF ( ln_isfcpl ) THEN 106 IF (lrst_oce) CALL isfcpl_rst_write(kt) 102 107 END IF 103 108 ! … … 122 127 INTEGER :: ji, jj 123 128 !!---------------------------------------------------------------------- 124 NAMELIST/namisf/ ln_isfcav_mlt, cn_isfcav_mlt, cn_gammablk, rn_gammat0, rn_gammas0, rn_htbl, sn_isfcav_fwf, & 125 & ln_isfpar_mlt, cn_isfpar_mlt, sn_isfpar_fwf, sn_isfpar_zmin, sn_isfpar_zmax, sn_isfpar_Leff 129 NAMELIST/namisf/ ln_isfcav_mlt, cn_isfcav_mlt, cn_gammablk, rn_gammat0, rn_gammas0, rn_htbl, sn_isfcav_fwf, & 130 & ln_isfpar_mlt, cn_isfpar_mlt, sn_isfpar_fwf, sn_isfpar_zmin, sn_isfpar_zmax, sn_isfpar_Leff, & 131 & ln_isfcpl , nn_drown, ln_isfcpl_cons, & 132 & cn_isfload , cn_isfdir 126 133 !!---------------------------------------------------------------------- 127 134 ! … … 130 137 ! 131 138 riceload(:,:) = 0.0_wp 132 fwfisf_ cpl(:,:)= 0.0_wp139 fwfisf_oasis(:,:) = 0.0_wp 133 140 fwfisf_par(:,:) = 0.0_wp ; fwfisf_par_b(:,:) = 0.0_wp 134 141 fwfisf_cav(:,:) = 0.0_wp ; fwfisf_cav_b(:,:) = 0.0_wp … … 148 155 IF(lwm) WRITE ( numond, namisf ) 149 156 ! 150 IF(lwp) WRITE(numout,*) 151 IF(lwp) WRITE(numout,*) 'isf_init : ice shelf initialisation' 152 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~' 153 IF(lwp) WRITE(numout,*) ' Namelist namisf :' 154 ! 155 IF(lwp) WRITE(numout,*) ' melt inside the cavity ln_isfcav_mlt = ', ln_isfcav_mlt 156 IF ( ln_isfcav ) THEN 157 IF(lwp) WRITE(numout,*) ' melt formulation cn_isfcav_mlt = ', cn_isfcav_mlt 158 IF(lwp) WRITE(numout,*) ' thickness of the top boundary layer rn_htbl = ', rn_htbl 159 IF(lwp) WRITE(numout,*) ' gamma formulation cn_gammablk = ', cn_gammablk 160 IF ( TRIM(cn_gammablk) .NE. 'spe' ) THEN 161 IF(lwp) WRITE(numout,*) ' gammat coefficient rn_gammat0 = ', rn_gammat0 162 IF(lwp) WRITE(numout,*) ' gammas coefficient rn_gammas0 = ', rn_gammas0 163 IF(lwp) WRITE(numout,*) ' top drag coef. used (from namdrg_top) rn_Cd0 = ', r_Cdmin_top 164 END IF 165 END IF 166 ! 167 IF(lwp) WRITE(numout,*) '' 168 ! 169 IF(lwp) WRITE(numout,*) ' ice shelf melt parametrisation ln_isfpar_mlt = ', ln_isfpar_mlt 170 IF ( ln_isfpar_mlt ) THEN 171 IF(lwp) WRITE(numout,*) ' isf parametrisation formulation cn_isfpar_mlt = ', cn_isfpar_mlt 172 END IF 173 IF(lwp) WRITE(numout,*) '' 174 ! 157 IF (lwp) THEN 158 WRITE(numout,*) 159 WRITE(numout,*) 'isf_init : ice shelf initialisation' 160 WRITE(numout,*) '~~~~~~~~~~~~' 161 WRITE(numout,*) ' Namelist namisf :' 162 ! 163 WRITE(numout,*) ' melt inside the cavity ln_isfcav_mlt = ', ln_isfcav_mlt 164 IF ( ln_isfcav ) THEN 165 WRITE(numout,*) ' melt formulation cn_isfcav_mlt = ', TRIM(cn_isfcav_mlt) 166 WRITE(numout,*) ' thickness of the top boundary layer rn_htbl = ', rn_htbl 167 WRITE(numout,*) ' gamma formulation cn_gammablk = ', TRIM(cn_gammablk) 168 IF ( TRIM(cn_gammablk) .NE. 'spe' ) THEN 169 WRITE(numout,*) ' gammat coefficient rn_gammat0 = ', rn_gammat0 170 WRITE(numout,*) ' gammas coefficient rn_gammas0 = ', rn_gammas0 171 WRITE(numout,*) ' top drag coef. used (from namdrg_top) rn_Cd0 = ', r_Cdmin_top 172 END IF 173 END IF 174 WRITE(numout,*) '' 175 ! 176 WRITE(numout,*) ' ice shelf melt parametrisation ln_isfpar_mlt = ', ln_isfpar_mlt 177 IF ( ln_isfpar_mlt ) THEN 178 WRITE(numout,*) ' isf parametrisation formulation cn_isfpar_mlt = ', TRIM(cn_isfpar_mlt) 179 END IF 180 WRITE(numout,*) '' 181 ! 182 WRITE(numout,*) ' Coupling to an ice sheet model ln_isfcpl = ', ln_isfcpl 183 IF ( ln_isfcpl ) THEN 184 WRITE(numout,*) ' conservation activated ln_isfcpl_cons = ', ln_isfcpl_cons 185 WRITE(numout,*) ' number of call of the extrapolation loop = ', nn_drown 186 ENDIF 187 ! 188 WRITE(numout,*) ' Ice shelf load method cn_isfload = ', TRIM(cn_isfload) 189 190 END IF 191 ! 192 !--------------------------------------------------------------------------------------------------------------------- 175 193 ! sanity check 176 194 ! melt in the cavity without cavity … … 178 196 & CALL ctl_stop('ice shelf melt in the cavity activated (ln_isfcav_mlt) but no cavity detected in domcfg (ln_isfcav), STOP' ) 179 197 ! 180 IF ( ln_cpl ) THEN 198 IF ( ln_isfcpl .AND. ln_isfcpl_cons .AND. ln_linssh ) & 199 & CALL ctl_stop( 'The coupling between NEMO and an ice sheet model with the conservation option does not work with the linssh option' ) 200 ! 201 IF ( l_isfoasis ) THEN 181 202 ! 182 203 CALL ctl_stop( ' ln_ctl and ice shelf not tested' ) 183 204 ! 184 205 ! NEMO coupled to ATMO model with isf cavity need oasis method for melt computation 185 IF ( ln_isfcav_mlt .AND. TRIM(cn_isfcav_mlt) /= 'oasis' ) CALL ctl_stop( 'cn_isfcav_mlt = oasis is the only option availble with ln_cpl' )186 IF ( ln_isfpar_mlt .AND. TRIM(cn_isfpar_mlt) /= 'oasis' ) CALL ctl_stop( 'cn_isfpar_mlt = oasis is the only option availble with ln_cpl' )206 IF ( ln_isfcav_mlt .AND. TRIM(cn_isfcav_mlt) /= 'oasis' ) CALL ctl_stop( 'cn_isfcav_mlt = oasis is the only option availble if fwf send by oasis' ) 207 IF ( ln_isfpar_mlt .AND. TRIM(cn_isfpar_mlt) /= 'oasis' ) CALL ctl_stop( 'cn_isfpar_mlt = oasis is the only option availble if fwf send by oasis' ) 187 208 ! 188 209 ! oasis melt computation not tested (coded but not tested) … … 198 219 END IF 199 220 ! 221 !--------------------------------------------------------------------------------------------------------------------- 200 222 ! initialisation ice shelf load 201 223 IF ( ln_isfcav ) THEN … … 212 234 r1_Lfusisf = 1._wp / rLfusisf 213 235 ! 236 ll_isfcpl = .FALSE. 237 ll_isfcpl_cons= .FALSE. 238 ! 214 239 ! initialisation melt in the cavity 215 240 IF ( ln_isfcav_mlt ) THEN … … 223 248 END IF 224 249 ! 250 !--------------------------------------------------------------------------------------------------------------------- 225 251 ! initialisation parametrised melt 226 252 IF ( ln_isfpar_mlt ) THEN … … 234 260 END IF 235 261 ! 262 !--------------------------------------------------------------------------------------------------------------------- 263 ! initialisation ice sheet coupling 264 IF( ln_isfcpl ) THEN 265 266 ! prepare writing restart 267 IF( lwxios ) CALL iom_set_rstw_var_active('ssmask') 268 IF( lwxios ) CALL iom_set_rstw_var_active('tmask') 269 IF( lwxios ) CALL iom_set_rstw_var_active('e3t_n') 270 IF( lwxios ) CALL iom_set_rstw_var_active('e3u_n') 271 IF( lwxios ) CALL iom_set_rstw_var_active('e3v_n') 272 273 IF( ln_rstart ) THEN 274 ! 275 ll_isfcpl = .TRUE. 276 ! 277 CALL isf_alloc_cpl() 278 ! 279 ! extrapolation tracer properties 280 CALL isfcpl_tra() 281 ! 282 ! correction of the horizontal divergence and associated temp. and salt content flux 283 CALL isfcpl_vol() 284 ! 285 ! apply the 'conservation' method 286 IF ( ln_isfcpl_cons ) THEN 287 ll_isfcpl_cons = .TRUE. 288 CALL isfcpl_cons() 289 END IF 290 ! 291 ! Need to include in the cpl cons the isfrst_cpl_div contribution 292 ! decide how to manage thickness level change in conservation 293 ! 294 tsb (:,:,:,:) = tsn (:,:,:,:) 295 sshb (:,:) = sshn(:,:) 296 ! 297 END IF 298 END IF 299 236 300 END SUBROUTINE isf_stp_init 237 301 !!====================================================================== -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/SBC/sbccpl.F90
r11403 r11423 36 36 USE eosbn2 ! 37 37 USE sbcrnf , ONLY : l_rnfcpl 38 USE isf , ONLY : l_isf cpl, fwfisf_cpl38 USE isf , ONLY : l_isfoasis, fwfisf_oasis 39 39 #if defined key_cice 40 40 USE ice_domain_size, only: ncat … … 475 475 476 476 IF( srcv(jpr_isf)%laction .AND. ln_isf ) THEN 477 l_isf cpl = .TRUE. ! -> no need to read isf in sbcisf477 l_isfoasis = .TRUE. ! -> isf fwf comes from oasis 478 478 IF(lwp) WRITE(numout,*) 479 479 IF(lwp) WRITE(numout,*) ' iceshelf received from oasis ' … … 1409 1409 ! ice shelf fwf 1410 1410 IF( srcv(jpr_isf)%laction ) THEN 1411 fwfisf_ cpl(:,:) = - frcv(jpr_isf)%z3(:,:,1) ! fresh water flux from the isf (fwfisf <0 mean melting)1411 fwfisf_oasis(:,:) = - frcv(jpr_isf)%z3(:,:,1) ! fresh water flux from the isf (fwfisf <0 mean melting) 1412 1412 END IF 1413 1413 … … 1713 1713 ENDIF 1714 1714 IF( srcv(jpr_isf)%laction ) THEN ! iceshelf (fwfisf <0 mean melting) 1715 fwfisf_ cpl(:,:) = - frcv(jpr_isf)%z3(:,:,1)1715 fwfisf_oasis(:,:) = - frcv(jpr_isf)%z3(:,:,1) 1716 1716 ENDIF 1717 1717 … … 1752 1752 ENDIF 1753 1753 IF( srcv(jpr_isf)%laction ) THEN ! iceshelf (fwfisf <0 mean melting) 1754 fwfisf_ cpl(:,:) = - frcv(jpr_isf)%z3(:,:,1)1754 fwfisf_oasis(:,:) = - frcv(jpr_isf)%z3(:,:,1) 1755 1755 ENDIF 1756 1756 ! -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/TRA/traisf.F90
r11403 r11423 16 16 USE isf ! Ice shelf variable 17 17 USE isfutils ! 18 USE iscplini ! Ice sheet coupling19 18 ! 20 19 USE in_out_manager ! I/O manager … … 56 55 ! 57 56 ! ice sheet coupling case 58 !CALL tra_isf_cpl() 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) 59 61 ! 60 62 IF( ln_timing ) CALL timing_stop('tra_isf') … … 76 78 REAL(wp), DIMENSION(jpi,jpj) , INTENT(in ) :: phtbl, pfrac 77 79 REAL(wp), DIMENSION(jpi,jpj,jpts), INTENT(in ) :: ptsc , ptsc_b 78 REAL(wp), DIMENSION(jpi,jpj) :: ztc79 80 !!---------------------------------------------------------------------- 80 81 INTEGER :: ji,jj,jk ! loop index … … 107 108 END SUBROUTINE tra_isf_mlt 108 109 ! 109 !SUBROUTINE tra_isf_cpl 110 ! 111 ! !---------------------------------------- 112 ! ! Ice Sheet coupling imbalance correction to have conservation 113 ! !---------------------------------------- 114 ! ! 115 ! IF( ln_iscpl .AND. ln_iscpl_hsb) THEN ! input of heat and salt due to river runoff 116 ! DO jk = 1,jpk 117 ! DO jj = 2, jpj 118 ! DO ji = fs_2, fs_jpim1 119 ! zdep = 1._wp / e3t_n(ji,jj,jk) 120 ! tsa(ji,jj,jk,jp_tem) = tsa(ji,jj,jk,jp_tem) - htsc_iscpl(ji,jj,jk,jp_tem) * zdep 121 ! tsa(ji,jj,jk,jp_sal) = tsa(ji,jj,jk,jp_sal) - htsc_iscpl(ji,jj,jk,jp_sal) * zdep 122 ! END DO 123 ! END DO 124 ! END DO 125 ! ENDIF 126 ! ! 127 ! END SUBROUTINE tra_isf_cpl 110 SUBROUTINE tra_isf_cpl( ptsc, ptsa ) 111 !!---------------------------------------------------------------------- 112 !! *** ROUTINE tra_isf_cpl *** 113 !! 114 !! *** Action :: Update tsa with the ice shelf coupling trend 115 !! 116 !!---------------------------------------------------------------------- 117 REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(inout) :: ptsa 118 !!---------------------------------------------------------------------- 119 REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(in ) :: ptsc !( >0 out ) 120 !!---------------------------------------------------------------------- 121 INTEGER :: jk 122 !!---------------------------------------------------------------------- 123 ! 124 DO jk = 1,jpk 125 ptsa(:,:,jk,jp_tem) = ptsa(:,:,jk,jp_tem) - ptsc(:,:,jk,jp_tem) * r1_e1e2t(:,:) / e3t_n(:,:,jk) 126 ptsa(:,:,jk,jp_sal) = ptsa(:,:,jk,jp_sal) - ptsc(:,:,jk,jp_sal) * r1_e1e2t(:,:) / e3t_n(:,:,jk) 127 END DO 128 ! 129 END SUBROUTINE tra_isf_cpl 128 130 ! 129 131 END MODULE traisf -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/tests/ISOMIP/EXPREF/file_def_nemo-oce.xml
r9572 r11423 27 27 <field field_ref="ssh" name="sossheig" /> 28 28 <!-- variable for ice shelf --> 29 <field field_ref="qlatisf" name="sohflisf" /> 30 <field field_ref="fwfisf" name="sowflisf" /> 29 <field field_ref="fwfisf_cav" name="sowflisf" /> 31 30 <field field_ref="isfgammat" name="sogammat" /> 32 31 <field field_ref="isfgammas" name="sogammas" />
Note: See TracChangeset
for help on using the changeset viewer.