[12068] | 1 | MODULE isfdynatf |
---|
[11403] | 2 | !!========================================================================= |
---|
| 3 | !! *** MODULE isfnxt *** |
---|
[12068] | 4 | !! Ice shelf update: compute the dynatf ice shelf contribution |
---|
[11403] | 5 | !!========================================================================= |
---|
| 6 | !! History : OPA ! 2019-09 (P. Mathiot) Original code |
---|
| 7 | !!------------------------------------------------------------------------- |
---|
| 8 | |
---|
| 9 | !!------------------------------------------------------------------------- |
---|
[12068] | 10 | !! isfnxt : apply correction needed for the ice shelf to ensure conservation |
---|
[11403] | 11 | !!------------------------------------------------------------------------- |
---|
[11395] | 12 | |
---|
[12077] | 13 | USE isf_oce |
---|
[11852] | 14 | |
---|
[12489] | 15 | USE phycst , ONLY: r1_rho0 ! physical constant |
---|
[13237] | 16 | USE dom_oce ! time and space domain |
---|
[14053] | 17 | USE oce, ONLY : ssh ! sea-surface height for qco substitution |
---|
[11852] | 18 | |
---|
[11403] | 19 | USE in_out_manager |
---|
[11395] | 20 | |
---|
[11403] | 21 | IMPLICIT NONE |
---|
[11395] | 22 | |
---|
[11403] | 23 | PRIVATE |
---|
[11395] | 24 | |
---|
[12068] | 25 | PUBLIC isf_dynatf |
---|
[12340] | 26 | !! * Substitutions |
---|
| 27 | # include "do_loop_substitute.h90" |
---|
[13237] | 28 | # include "domzgr_substitute.h90" |
---|
[11395] | 29 | |
---|
| 30 | CONTAINS |
---|
| 31 | |
---|
[12068] | 32 | SUBROUTINE isf_dynatf ( kt, Kmm, pe3t_f, pcoef ) |
---|
[11403] | 33 | !!-------------------------------------------------------------------- |
---|
[12068] | 34 | !! *** ROUTINE isf_dynatf *** |
---|
[11403] | 35 | !! |
---|
| 36 | !! ** Purpose : compute the ice shelf volume filter correction for cavity, param, ice sheet coupling case |
---|
| 37 | !! |
---|
| 38 | !!-------------------------- OUT ------------------------------------- |
---|
[12068] | 39 | INTEGER , INTENT(in ) :: kt ! ocean time step |
---|
| 40 | INTEGER , INTENT(in ) :: Kmm ! ocean time level index |
---|
| 41 | REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pe3t_f ! time filtered scale factor to be corrected |
---|
[11541] | 42 | ! |
---|
[12489] | 43 | REAL(wp) , INTENT(in ) :: pcoef ! rn_atfp * rn_Dt * r1_rho0 |
---|
[11403] | 44 | !!-------------------------------------------------------------------- |
---|
[11541] | 45 | INTEGER :: jk ! loop index |
---|
[11403] | 46 | !!-------------------------------------------------------------------- |
---|
[11395] | 47 | ! |
---|
| 48 | ! ice shelf cavity |
---|
[12068] | 49 | IF ( ln_isfcav_mlt ) CALL isf_dynatf_mlt(Kmm, pe3t_f, misfkt_cav, misfkb_cav, rhisf_tbl_cav, rfrac_tbl_cav, fwfisf_cav, fwfisf_cav_b, pcoef) |
---|
[11395] | 50 | ! |
---|
| 51 | ! ice shelf parametrised |
---|
[12068] | 52 | IF ( ln_isfpar_mlt ) CALL isf_dynatf_mlt(Kmm, pe3t_f, misfkt_par, misfkb_par, rhisf_tbl_par, rfrac_tbl_par, fwfisf_par, fwfisf_par_b, pcoef) |
---|
[11395] | 53 | ! |
---|
[11541] | 54 | IF ( ln_isfcpl .AND. ln_rstart .AND. kt == nit000+1 ) THEN |
---|
| 55 | DO jk = 1, jpkm1 |
---|
[12068] | 56 | pe3t_f(:,:,jk) = pe3t_f(:,:,jk) - pcoef * risfcpl_vol(:,:,jk) * r1_e1e2t(:,:) |
---|
[11541] | 57 | END DO |
---|
| 58 | END IF |
---|
| 59 | ! |
---|
[12068] | 60 | END SUBROUTINE isf_dynatf |
---|
[11395] | 61 | |
---|
[12068] | 62 | SUBROUTINE isf_dynatf_mlt ( Kmm, pe3t_f, ktop, kbot, phtbl, pfrac, pfwf, pfwf_b, pcoef ) |
---|
[11403] | 63 | !!-------------------------------------------------------------------- |
---|
[12068] | 64 | !! *** ROUTINE isf_dynatf_mlt *** |
---|
[11403] | 65 | !! |
---|
| 66 | !! ** Purpose : compute the ice shelf volume filter correction for cavity or param |
---|
| 67 | !! |
---|
| 68 | !!-------------------------- IN ------------------------------------- |
---|
[12068] | 69 | INTEGER , INTENT(in ) :: Kmm ! ocean time level index |
---|
| 70 | REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pe3t_f ! time-filtered scale factor to be corrected |
---|
| 71 | INTEGER , DIMENSION(jpi,jpj) , INTENT(in ) :: ktop , kbot ! top and bottom level of tbl |
---|
| 72 | REAL(wp), DIMENSION(jpi,jpj) , INTENT(in ) :: pfrac, phtbl ! fraction of bottom cell included in tbl, tbl thickness |
---|
| 73 | REAL(wp), DIMENSION(jpi,jpj) , INTENT(in ) :: pfwf , pfwf_b ! now/before fwf |
---|
[12489] | 74 | REAL(wp), INTENT(in ) :: pcoef ! rn_atfp * rn_Dt * r1_rho0 |
---|
[11395] | 75 | !!---------------------------------------------------------------------- |
---|
| 76 | INTEGER :: ji,jj,jk |
---|
| 77 | REAL(wp), DIMENSION(jpi,jpj) :: zfwfinc |
---|
| 78 | !!---------------------------------------------------------------------- |
---|
| 79 | ! |
---|
| 80 | ! compute fwf conservation correction |
---|
[12489] | 81 | zfwfinc(:,:) = pcoef * ( pfwf_b(:,:) - pfwf(:,:) ) / ( ht(:,:) + 1._wp - ssmask(:,:) ) * r1_rho0 |
---|
[11395] | 82 | ! |
---|
[12372] | 83 | ! add the increment |
---|
| 84 | DO jk = 1, jpkm1 |
---|
[15001] | 85 | pe3t_f(:,:,jk) = pe3t_f(:,:,jk) + tmask(:,:,jk) * zfwfinc(:,:) & |
---|
[13237] | 86 | & * e3t(:,:,jk,Kmm) |
---|
[12372] | 87 | END DO |
---|
[11395] | 88 | ! |
---|
[12068] | 89 | END SUBROUTINE isf_dynatf_mlt |
---|
[11395] | 90 | |
---|
[12068] | 91 | END MODULE isfdynatf |
---|