Changeset 11494 for NEMO/branches/2019/ENHANCE-02_ISF_nemo/src
- Timestamp:
- 2019-09-03T12:46:35+02:00 (5 years ago)
- Location:
- NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/DIA/diawri.F90
r11423 r11494 915 915 END IF 916 916 IF (ln_isfpar_mlt) THEN 917 CALL iom_rstput( 0, 0, inum, 'isfmsk_par', REAL(mskisf_par,8) ) ! now k-velocity 917 918 CALL iom_rstput( 0, 0, inum, 'fwfisf_par', fwfisf_par ) ! now k-velocity 918 919 CALL iom_rstput( 0, 0, inum, 'rhisf_par_tbl', rhisf_tbl_par ) ! now k-velocity -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isfcavmlt.F90
r11488 r11494 42 42 !!---------------------------------------------------------------------- 43 43 !! 44 !! ** Purpose : compute ice shelf fwf/heqt fluxes44 !! ** Purpose : compute or read ice shelf fwf/heat fluxes in the ice shelf cavity 45 45 !! 46 46 !!--------------------------------------------------------------------- … … 189 189 ! 190 190 ! compute coeficient to solve the 2nd order equation 191 zeps1 = rau0_rcp *pgt(ji,jj)192 zeps2 = rLfusisf *rau0*pgs(ji,jj)193 zeps3 = rhoisf *rcpisf*rkappa/MAX(risfdep(ji,jj),zeps)194 zeps4 = risf_lamb2 +risf_lamb3*risfdep(ji,jj)195 zeps6 = zeps4 -pttbl(ji,jj)196 zeps7 = zeps4 -rtsurf191 zeps1 = rau0_rcp * pgt(ji,jj) 192 zeps2 = rLfusisf * rau0 * pgs(ji,jj) 193 zeps3 = rhoisf * rcpisf * rkappa / MAX(risfdep(ji,jj),zeps) 194 zeps4 = risf_lamb2 + risf_lamb3 * risfdep(ji,jj) 195 zeps6 = zeps4 - pttbl(ji,jj) 196 zeps7 = zeps4 - rtsurf 197 197 ! 198 198 ! solve the 2nd order equation to find zsfrz 199 199 zaqe = risf_lamb1 * (zeps1 + zeps3) 200 zaqer = 0.5_wp /MIN(zaqe,-zeps)201 zbqe = zeps1 *zeps6+zeps3*zeps7-zeps2202 zcqe = zeps2 *pstbl(ji,jj)203 zdis = zbqe *zbqe-4.0_wp*zaqe*zcqe200 zaqer = 0.5_wp / MIN(zaqe,-zeps) 201 zbqe = zeps1 * zeps6 + zeps3 * zeps7 - zeps2 202 zcqe = zeps2 * pstbl(ji,jj) 203 zdis = zbqe * zbqe - 4.0_wp * zaqe * zcqe 204 204 ! 205 205 ! Presumably zdis can never be negative because gammas is very small compared to gammat 206 zsfrz=(-zbqe -SQRT(zdis))*zaqer207 IF ( zsfrz < 0.0_wp ) zsfrz=(-zbqe +SQRT(zdis))*zaqer ! check this if this if is needed206 zsfrz=(-zbqe - SQRT(zdis)) * zaqer 207 IF ( zsfrz < 0.0_wp ) zsfrz=(-zbqe + SQRT(zdis)) * zaqer ! check this if this if is needed 208 208 ! 209 209 ! compute t freeze (eq. 25) -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isfpar.F90
r11423 r11494 43 43 SUBROUTINE isf_par( kt, ptsc, pqfwf ) 44 44 !!--------------------------------------------------------------------- 45 !! *** ROUTINE sbc_isf_cav ***45 !! *** ROUTINE isf_par *** 46 46 !! 47 47 !! ** Purpose : … … 79 79 zqh(:,:) = ( zqhc (:,:) + zqoce(:,:) ) 80 80 ! 81 ! lbclnk on melt 81 ! lbclnk on melt and heat fluxes 82 82 CALL lbc_lnk_multi( 'isfmlt', zqh, 'T', 1., pqfwf, 'T', 1.) 83 83 ! … … 120 120 ! 121 121 ! if param used under an ice shelf overwrite ztblmax by the ice shelf draft 122 WHERE ( risfdep > 0._wp )122 WHERE ( risfdep > 0._wp .AND. ztblmin > 0._wp ) 123 123 ztblmin(:,:) = risfdep(:,:) 124 124 END WHERE … … 130 130 rhisf0_tbl_par(:,:) = ztblmax(:,:) - ztblmin(:,:) 131 131 ! 132 ! compute misfkb_par, rhisf_tbl133 rhisf_tbl_par(:,:) = rhisf0_tbl_par(:,:)134 CALL isf_tbl_lvl( ht_n, e3t_n, misfkt_par, misfkb_par, rhisf_tbl_par, rfrac_tbl_par )135 !136 132 ! define iceshelf parametrisation mask 137 133 mskisf_par = 0 … … 140 136 END WHERE 141 137 ! 138 ! compute misfkb_par, rhisf_tbl 139 rhisf_tbl_par(:,:) = rhisf0_tbl_par(:,:) 140 CALL isf_tbl_lvl( ht_n * mskisf_par, e3t_n, misfkt_par, misfkb_par, rhisf_tbl_par, rfrac_tbl_par ) 141 ! 142 142 SELECT CASE ( TRIM(cn_isfpar_mlt) ) 143 143 ! 144 144 CASE ( 'spe' ) 145 145 ! 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 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,*) 151 151 IF(lwp) WRITE(numout,*) ' ==>>> ice melt read from forcing field (cn_isfmlt_par = spe)' 152 152 ! 153 153 CASE ( 'bg03' ) 154 154 ! … … 161 161 ! 162 162 CASE ( 'oasis' ) 163 163 ! 164 164 IF(lwp) WRITE(numout,*) 165 165 IF(lwp) WRITE(numout,*) ' ==>>> isf melt provided by OASIS (cn_isfmlt_par = oasis)' 166 166 ! 167 167 CASE DEFAULT 168 168 CALL ctl_stop( 'sbc_isf_init: wrong value of nn_isf' ) … … 171 171 END SUBROUTINE isf_par_init 172 172 173 173 END MODULE isfpar -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isfparmlt.F90
r11425 r11494 37 37 ! ------------------------------------------------------------------------------------------------------- 38 38 39 SUBROUTINE isfpar_mlt( kt, pq fwf, pqoce, pqhc)40 !!--------------------------------------------------------------------- 41 !! *** ROUTINE sbc_isf***39 SUBROUTINE isfpar_mlt( kt, pqhc, pqoce, pqfwf ) 40 !!--------------------------------------------------------------------- 41 !! *** ROUTINE isfpar_mlt *** 42 42 !! 43 43 !! ** Purpose : Compute Salt and Heat fluxes related to ice_shelf … … 49 49 !!---------------------------------------------------------------------- 50 50 !!-------------------------- OUT ------------------------------------- 51 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: pqfwf, pqoce, pqhc ! fresh water, ice-ocean heat and heat content fluxes51 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: pqfwf, pqoce, pqhc ! fresh water, ice-ocean heat and heat content fluxes 52 52 !!-------------------------- IN ------------------------------------- 53 53 INTEGER, INTENT(in) :: kt ! ocean time step … … 72 72 ! ------------------------------------------------------------------------------------------------------- 73 73 74 SUBROUTINE isfpar_mlt_spe(kt, pqhc, pq fwf, pqoce)74 SUBROUTINE isfpar_mlt_spe(kt, pqhc, pqoce, pqfwf) 75 75 !!--------------------------------------------------------------------- 76 76 !! *** ROUTINE isfpar_mlt_spe *** … … 81 81 !!---------------------------------------------------------------------- 82 82 !!-------------------------- OUT ------------------------------------- 83 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: pqhc, pqfwf, pqoce ! fresh water and ice-ocean heat fluxes83 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: pqhc, pqfwf, pqoce ! fresh water and ice-ocean heat fluxes 84 84 !!-------------------------- IN ------------------------------------- 85 85 INTEGER, INTENT(in) :: kt … … 122 122 !!---------------------------------------------------------------------- 123 123 !!-------------------------- OUT ------------------------------------- 124 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: pqhc, pqfwf, pqoce ! fresh water and ice-ocean heat fluxes124 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: pqhc, pqfwf, pqoce ! fresh water and ice-ocean heat fluxes 125 125 !!-------------------------- IN ------------------------------------- 126 126 INTEGER, INTENT(in) :: kt … … 158 158 SUBROUTINE isfpar_mlt_oasis(kt, pqhc , pqoce, pqfwf ) 159 159 !!---------------------------------------------------------------------- 160 !! *** ROUTINE isfpar_oasis *** 160 161 !! 161 162 !! ** Purpose : scale the fwf read from input file by the total amount received by the sbccpl interface 162 163 !! 163 !! ** Purpose : - read ice shelf melt from forcing file => pattern164 !! - total amount of fwf isgiven by sbccpl (fwfisf_oasis)164 !! ** Purpose : - read ice shelf melt from forcing file and scale it by the input file total amount => pattern 165 !! - compute total amount of fwf given by sbccpl (fwfisf_oasis) 165 166 !! - scale fwf and compute heat fluxes 166 167 !! -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isftbl.F90
r11403 r11494 210 210 ! 211 211 ! phtbl need to be bounded by water column thickness before 212 ! test: if phtbl = water column thickness, should return mbathy213 ! test: if phtbl = 0 should return ktop212 ! test: if htbl = water column thickness, should return mbathy 213 ! test: if htbl = 0 should return ktop (phtbl cap to e3t(ji,jj,1)) 214 214 ! 215 215 ! get ktbl -
NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/ISF/isfutils.F90
r11403 r11494 38 38 REAL(wp), DIMENSION(jpi,jpj), INTENT( out) :: pvar ! output variable 39 39 !!-------------------------- IN ------------------------------------- 40 CHARACTER(len=256) , INTENT(in ) :: cdfile, cdvar ! input file name and variable name 40 CHARACTER(len=256) , INTENT(in ) :: cdfile ! input file name 41 CHARACTER(len=34) , INTENT(in ) :: cdvar ! variable name 41 42 !!-------------------------------------------------------------------- 42 43 INTEGER :: inum 43 44 !!-------------------------------------------------------------------- 44 45 45 CALL iom_open( cdfile, inum )46 CALL iom_get( inum, jpdom_data, cdvar, pvar, 1)46 CALL iom_open( TRIM(cdfile), inum ) 47 CALL iom_get( inum, jpdom_data, TRIM(cdvar), pvar) 47 48 CALL iom_close(inum) 48 49
Note: See TracChangeset
for help on using the changeset viewer.