Changeset 11521 for NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF
- Timestamp:
- 2019-09-10T11:49:13+02:00 (5 years ago)
- Location:
- NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
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
Note: See TracChangeset
for help on using the changeset viewer.