[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 | |
---|
[12068] | 15 | USE phycst , ONLY: r1_rau0 ! physical constant |
---|
| 16 | USE dom_oce, ONLY: e3t, r1_e1e2t ! time and space domain |
---|
[11852] | 17 | |
---|
[11403] | 18 | USE in_out_manager |
---|
[11395] | 19 | |
---|
[11403] | 20 | IMPLICIT NONE |
---|
[11395] | 21 | |
---|
[11403] | 22 | PRIVATE |
---|
[11395] | 23 | |
---|
[12068] | 24 | PUBLIC isf_dynatf |
---|
[11395] | 25 | |
---|
| 26 | CONTAINS |
---|
| 27 | |
---|
[12068] | 28 | SUBROUTINE isf_dynatf ( kt, Kmm, pe3t_f, pcoef ) |
---|
[11403] | 29 | !!-------------------------------------------------------------------- |
---|
[12068] | 30 | !! *** ROUTINE isf_dynatf *** |
---|
[11403] | 31 | !! |
---|
| 32 | !! ** Purpose : compute the ice shelf volume filter correction for cavity, param, ice sheet coupling case |
---|
| 33 | !! |
---|
| 34 | !!-------------------------- OUT ------------------------------------- |
---|
[12068] | 35 | INTEGER , INTENT(in ) :: kt ! ocean time step |
---|
| 36 | INTEGER , INTENT(in ) :: Kmm ! ocean time level index |
---|
| 37 | REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pe3t_f ! time filtered scale factor to be corrected |
---|
[11541] | 38 | ! |
---|
[12068] | 39 | REAL(wp) , INTENT(in ) :: pcoef ! atfp * rdt * r1_rau0 |
---|
[11403] | 40 | !!-------------------------------------------------------------------- |
---|
[11541] | 41 | INTEGER :: jk ! loop index |
---|
[11403] | 42 | !!-------------------------------------------------------------------- |
---|
[11395] | 43 | ! |
---|
| 44 | ! ice shelf cavity |
---|
[12068] | 45 | 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] | 46 | ! |
---|
| 47 | ! ice shelf parametrised |
---|
[12068] | 48 | 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] | 49 | ! |
---|
[11541] | 50 | IF ( ln_isfcpl .AND. ln_rstart .AND. kt == nit000+1 ) THEN |
---|
| 51 | DO jk = 1, jpkm1 |
---|
[12068] | 52 | pe3t_f(:,:,jk) = pe3t_f(:,:,jk) - pcoef * risfcpl_vol(:,:,jk) * r1_e1e2t(:,:) |
---|
[11541] | 53 | END DO |
---|
| 54 | END IF |
---|
| 55 | ! |
---|
[12068] | 56 | END SUBROUTINE isf_dynatf |
---|
[11395] | 57 | |
---|
[12068] | 58 | SUBROUTINE isf_dynatf_mlt ( Kmm, pe3t_f, ktop, kbot, phtbl, pfrac, pfwf, pfwf_b, pcoef ) |
---|
[11403] | 59 | !!-------------------------------------------------------------------- |
---|
[12068] | 60 | !! *** ROUTINE isf_dynatf_mlt *** |
---|
[11403] | 61 | !! |
---|
| 62 | !! ** Purpose : compute the ice shelf volume filter correction for cavity or param |
---|
| 63 | !! |
---|
| 64 | !!-------------------------- IN ------------------------------------- |
---|
[12068] | 65 | INTEGER , INTENT(in ) :: Kmm ! ocean time level index |
---|
| 66 | REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pe3t_f ! time-filtered scale factor to be corrected |
---|
| 67 | INTEGER , DIMENSION(jpi,jpj) , INTENT(in ) :: ktop , kbot ! top and bottom level of tbl |
---|
| 68 | REAL(wp), DIMENSION(jpi,jpj) , INTENT(in ) :: pfrac, phtbl ! fraction of bottom cell included in tbl, tbl thickness |
---|
| 69 | REAL(wp), DIMENSION(jpi,jpj) , INTENT(in ) :: pfwf , pfwf_b ! now/before fwf |
---|
| 70 | REAL(wp), INTENT(in ) :: pcoef ! atfp * rdt * r1_rau0 |
---|
[11395] | 71 | !!---------------------------------------------------------------------- |
---|
| 72 | INTEGER :: ji,jj,jk |
---|
| 73 | REAL(wp), DIMENSION(jpi,jpj) :: zfwfinc |
---|
| 74 | !!---------------------------------------------------------------------- |
---|
| 75 | ! |
---|
| 76 | ! compute fwf conservation correction |
---|
[11541] | 77 | zfwfinc(:,:) = pcoef * ( pfwf_b(:,:) - pfwf(:,:) ) / phtbl(:,:) * r1_rau0 |
---|
[11395] | 78 | ! |
---|
[11403] | 79 | ! add the increment in the tbl |
---|
[11395] | 80 | DO jk = 1, jpkm1 |
---|
| 81 | DO jj = 1, jpj |
---|
| 82 | DO ji = 1, jpi |
---|
| 83 | IF( ktop(ji,jj) <= jk .AND. jk < kbot(ji,jj) ) THEN |
---|
[12068] | 84 | pe3t_f(ji,jj,jk) = pe3t_f(ji,jj,jk) - zfwfinc(ji,jj) * e3t(ji,jj,jk,Kmm) |
---|
[11395] | 85 | ELSEIF ( jk == kbot(ji,jj) ) THEN |
---|
[12068] | 86 | pe3t_f(ji,jj,jk) = pe3t_f(ji,jj,jk) - zfwfinc(ji,jj) * e3t(ji,jj,jk,Kmm) * pfrac(ji,jj) |
---|
[11395] | 87 | ENDIF |
---|
| 88 | END DO |
---|
| 89 | END DO |
---|
| 90 | END DO |
---|
| 91 | ! |
---|
[12068] | 92 | END SUBROUTINE isf_dynatf_mlt |
---|
[11395] | 93 | |
---|
[12068] | 94 | END MODULE isfdynatf |
---|