[11931] | 1 | MODULE isfdynnxt |
---|
[11403] | 2 | !!========================================================================= |
---|
| 3 | !! *** MODULE isfnxt *** |
---|
| 4 | !! Ice shelf update: compute the dynnxt ice shelf contribution |
---|
| 5 | !!========================================================================= |
---|
| 6 | !! History : OPA ! 2019-09 (P. Mathiot) Original code |
---|
| 7 | !!------------------------------------------------------------------------- |
---|
| 8 | |
---|
| 9 | !!------------------------------------------------------------------------- |
---|
[11852] | 10 | !! isfnxt : aplly correction needed for the ice shelf to ensure conservation |
---|
[11403] | 11 | !!------------------------------------------------------------------------- |
---|
[11395] | 12 | |
---|
[11987] | 13 | USE isf_oce |
---|
[11852] | 14 | |
---|
| 15 | USE phycst , ONLY: r1_rau0 ! physical constant |
---|
| 16 | USE dom_oce, ONLY: e3t_b, e3t_n, r1_e1e2t ! time and space domain |
---|
| 17 | |
---|
[11403] | 18 | USE in_out_manager |
---|
[11395] | 19 | |
---|
[11403] | 20 | IMPLICIT NONE |
---|
[11395] | 21 | |
---|
[11403] | 22 | PRIVATE |
---|
[11395] | 23 | |
---|
[11852] | 24 | PUBLIC isf_dynnxt |
---|
[11395] | 25 | |
---|
| 26 | CONTAINS |
---|
| 27 | |
---|
[11541] | 28 | SUBROUTINE isf_dynnxt ( kt, pcoef ) |
---|
[11403] | 29 | !!-------------------------------------------------------------------- |
---|
| 30 | !! *** ROUTINE isf_dynnxt *** |
---|
| 31 | !! |
---|
| 32 | !! ** Purpose : compute the ice shelf volume filter correction for cavity, param, ice sheet coupling case |
---|
| 33 | !! |
---|
| 34 | !!-------------------------- OUT ------------------------------------- |
---|
[11541] | 35 | INTEGER , INTENT(in ) :: kt |
---|
| 36 | ! |
---|
[11852] | 37 | REAL(wp), INTENT(in ) :: pcoef ! atfp * rdt * r1_rau0 |
---|
[11403] | 38 | !!-------------------------------------------------------------------- |
---|
[11541] | 39 | INTEGER :: jk ! loop index |
---|
[11403] | 40 | !!-------------------------------------------------------------------- |
---|
[11395] | 41 | ! |
---|
| 42 | ! ice shelf cavity |
---|
| 43 | IF ( ln_isfcav_mlt ) CALL isf_dynnxt_mlt(misfkt_cav, misfkb_cav, rhisf_tbl_cav, rfrac_tbl_cav, fwfisf_cav, fwfisf_cav_b, pcoef) |
---|
| 44 | ! |
---|
| 45 | ! ice shelf parametrised |
---|
| 46 | IF ( ln_isfpar_mlt ) CALL isf_dynnxt_mlt(misfkt_par, misfkb_par, rhisf_tbl_par, rfrac_tbl_par, fwfisf_par, fwfisf_par_b, pcoef) |
---|
| 47 | ! |
---|
[11541] | 48 | IF ( ln_isfcpl .AND. ln_rstart .AND. kt == nit000+1 ) THEN |
---|
| 49 | DO jk = 1, jpkm1 |
---|
| 50 | e3t_b(:,:,jk) = e3t_b(:,:,jk) - pcoef * risfcpl_vol(:,:,jk) * r1_e1e2t(:,:) |
---|
| 51 | END DO |
---|
| 52 | END IF |
---|
| 53 | ! |
---|
[11395] | 54 | END SUBROUTINE isf_dynnxt |
---|
| 55 | |
---|
| 56 | SUBROUTINE isf_dynnxt_mlt ( ktop, kbot, phtbl, pfrac, pfwf, pfwf_b, pcoef ) |
---|
[11403] | 57 | !!-------------------------------------------------------------------- |
---|
| 58 | !! *** ROUTINE isf_dynnxt_mlt *** |
---|
| 59 | !! |
---|
| 60 | !! ** Purpose : compute the ice shelf volume filter correction for cavity or param |
---|
| 61 | !! |
---|
| 62 | !!-------------------------- IN ------------------------------------- |
---|
[11395] | 63 | INTEGER , DIMENSION(jpi,jpj), INTENT(in ) :: ktop , kbot ! top and bottom level of tbl |
---|
| 64 | REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: pfrac, phtbl ! fraction of bottom cell included in tbl, tbl thickness |
---|
| 65 | REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: pfwf , pfwf_b ! now/before fwf |
---|
| 66 | REAL(wp), INTENT(in ) :: pcoef ! atfp * rdt * r1_rau0 |
---|
| 67 | !!---------------------------------------------------------------------- |
---|
| 68 | INTEGER :: ji,jj,jk |
---|
| 69 | REAL(wp), DIMENSION(jpi,jpj) :: zfwfinc |
---|
| 70 | !!---------------------------------------------------------------------- |
---|
| 71 | ! |
---|
| 72 | ! compute fwf conservation correction |
---|
[11541] | 73 | zfwfinc(:,:) = pcoef * ( pfwf_b(:,:) - pfwf(:,:) ) / phtbl(:,:) * r1_rau0 |
---|
[11395] | 74 | ! |
---|
[11403] | 75 | ! add the increment in the tbl |
---|
[11395] | 76 | DO jk = 1, jpkm1 |
---|
| 77 | DO jj = 1, jpj |
---|
| 78 | DO ji = 1, jpi |
---|
| 79 | IF( ktop(ji,jj) <= jk .AND. jk < kbot(ji,jj) ) THEN |
---|
| 80 | e3t_b(ji,jj,jk) = e3t_b(ji,jj,jk) - zfwfinc(ji,jj) * e3t_n(ji,jj,jk) |
---|
| 81 | ELSEIF ( jk == kbot(ji,jj) ) THEN |
---|
| 82 | e3t_b(ji,jj,jk) = e3t_b(ji,jj,jk) - zfwfinc(ji,jj) * e3t_n(ji,jj,jk) * pfrac(ji,jj) |
---|
| 83 | ENDIF |
---|
| 84 | END DO |
---|
| 85 | END DO |
---|
| 86 | END DO |
---|
| 87 | ! |
---|
| 88 | END SUBROUTINE isf_dynnxt_mlt |
---|
| 89 | |
---|
[11931] | 90 | END MODULE isfdynnxt |
---|