Changeset 14641
- Timestamp:
- 2021-03-26T11:30:01+01:00 (3 years ago)
- Location:
- NEMO/branches/2021/dev_r14608_AGRIF_domcfg/src/NST
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2021/dev_r14608_AGRIF_domcfg/src/NST/agrif_oce_interp.F90
r14433 r14641 44 44 PUBLIC interptsn, interpsshn, interpavm 45 45 PUBLIC interpunb, interpvnb , interpub2b, interpvb2b 46 PUBLIC interp e3t, interpglamt, interpgphit46 PUBLIC interpglamt, interpgphit 47 47 PUBLIC interpht0, interpmbkt, interpe3t0_vremap 48 48 PUBLIC agrif_istate_oce, agrif_istate_ssh ! called by icestate.F90 and domvvl.F90 … … 1535 1535 1536 1536 1537 SUBROUTINE interpe3t( ptab, i1, i2, j1, j2, k1, k2, before )1538 !!----------------------------------------------------------------------1539 !! *** ROUTINE interpe3t ***1540 !!----------------------------------------------------------------------1541 INTEGER , INTENT(in ) :: i1, i2, j1, j2, k1, k21542 REAL(wp),DIMENSION(i1:i2,j1:j2,k1:k2), INTENT(inout) :: ptab1543 LOGICAL , INTENT(in ) :: before1544 !1545 INTEGER :: ji, jj, jk1546 !!----------------------------------------------------------------------1547 !1548 IF( before ) THEN1549 ptab(i1:i2,j1:j2,k1:k2) = tmask(i1:i2,j1:j2,k1:k2) * e3t_0(i1:i2,j1:j2,k1:k2)1550 ELSE1551 !1552 DO jk = k1, k21553 DO jj = j1, j21554 DO ji = i1, i21555 IF( ABS( ptab(ji,jj,jk) - tmask(ji,jj,jk) * e3t_0(ji,jj,jk) ) > 1.D-2) THEN1556 WRITE(numout,*) ' Agrif error for e3t_0: parent , child, i, j, k ', &1557 & ptab(ji,jj,jk), tmask(ji,jj,jk) * e3t_0(ji,jj,jk), &1558 & mig0(ji), mjg0(jj), jk1559 kindic_agr = kindic_agr + 11560 ENDIF1561 END DO1562 END DO1563 END DO1564 !1565 ENDIF1566 !1567 END SUBROUTINE interpe3t1568 1569 1570 1537 SUBROUTINE interpe3t0_vremap( ptab, i1, i2, j1, j2, k1, k2, before ) 1571 1538 !!---------------------------------------------------------------------- … … 1793 1760 INTEGER, INTENT(inout) :: iindic 1794 1761 !! 1795 INTEGER :: ji, jj 1762 INTEGER :: ji, jj, jk 1796 1763 INTEGER :: istart, iend, jstart, jend, ispon 1797 1764 !!---------------------------------------------------------------------- … … 1801 1768 IF(lk_west) THEN 1802 1769 ispon = nn_sponge_len * Agrif_irhox() 1803 istart = nn_hls + 2! halo + land + 11770 istart = nn_hls + 1 ! halo + land + 1 1804 1771 iend = nn_hls + 1 + nbghostcells + ispon ! halo + land + nbghostcells + sponge 1805 jstart = nn_hls + 21806 jend = jpjglo - nn_hls - 11772 jstart = nn_hls + 1 1773 jend = jpjglo - nn_hls 1807 1774 DO ji = mi0(istart), mi1(iend) 1808 1775 DO jj = mj0(jstart), mj1(jend) 1809 1776 IF ( ABS(ht0_parent(ji,jj)-ht_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 1777 IF ( .NOT.ln_vert_remap) THEN 1778 DO jk = 1, jpkm1 1779 IF ( ABS(e3t0_parent(ji,jj,jk)-e3t_0(ji,jj,jk))*tmask(ji,jj,jk) > 1.e-3 ) iindic = iindic + 1 1780 END DO 1781 ENDIF 1810 1782 END DO 1811 1783 DO jj = mj0(jstart), mj1(jend-1) 1812 1784 IF ( ABS(hv0_parent(ji,jj)-hv_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 1785 IF ( .NOT.ln_vert_remap) THEN 1786 DO jk = 1, jpkm1 1787 IF ( ABS(e3v0_parent(ji,jj,jk)-e3v_0(ji,jj,jk))*vmask(ji,jj,jk) > 1.e-3 ) iindic = iindic + 1 1788 END DO 1789 ENDIF 1813 1790 END DO 1814 1791 END DO … … 1816 1793 DO jj = mj0(jstart), mj1(jend) 1817 1794 IF ( ABS(hu0_parent(ji,jj)-hu_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 1795 IF ( .NOT.ln_vert_remap) THEN 1796 DO jk = 1, jpkm1 1797 IF ( ABS(e3u0_parent(ji,jj,jk)-e3u_0(ji,jj,jk))*umask(ji,jj,jk) > 1.e-3 ) iindic = iindic + 1 1798 END DO 1799 ENDIF 1818 1800 END DO 1819 1801 END DO … … 1824 1806 ispon = nn_sponge_len * Agrif_irhox() 1825 1807 istart = jpiglo - ( nn_hls + nbghostcells + ispon ) ! halo + land + nbghostcells + sponge - 1 1826 iend = jpiglo - ( nn_hls + 1 )! halo + land + 1 - 11827 jstart = nn_hls + 21828 jend = jpjglo - nn_hls - 11808 iend = jpiglo - nn_hls ! halo + land + 1 - 1 1809 jstart = nn_hls + 1 1810 jend = jpjglo - nn_hls 1829 1811 DO ji = mi0(istart), mi1(iend) 1830 1812 DO jj = mj0(jstart), mj1(jend) 1831 1813 IF ( ABS(ht0_parent(ji,jj)-ht_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 1814 IF ( .NOT.ln_vert_remap) THEN 1815 DO jk = 1, jpkm1 1816 IF ( ABS(e3t0_parent(ji,jj,jk)-e3t_0(ji,jj,jk))*tmask(ji,jj,jk) > 1.e-3 ) iindic = iindic + 1 1817 END DO 1818 ENDIF 1832 1819 END DO 1833 1820 DO jj = mj0(jstart), mj1(jend-1) 1834 1821 IF ( ABS(hv0_parent(ji,jj)-hv_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 1835 END DO 1836 END DO 1837 DO ji = mi0(istart+1), mi1(iend-1) 1822 IF ( .NOT.ln_vert_remap) THEN 1823 DO jk = 1, jpkm1 1824 IF ( ABS(e3v0_parent(ji,jj,jk)-e3v_0(ji,jj,jk))*vmask(ji,jj,jk) > 1.e-3 ) iindic = iindic + 1 1825 END DO 1826 ENDIF 1827 END DO 1828 END DO 1829 DO ji = mi0(istart), mi1(iend-1) 1838 1830 DO jj = mj0(jstart), mj1(jend) 1839 1831 IF ( ABS(hu0_parent(ji,jj)-hu_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 1832 IF ( .NOT.ln_vert_remap) THEN 1833 DO jk = 1, jpkm1 1834 IF ( ABS(e3u0_parent(ji,jj,jk)-e3u_0(ji,jj,jk))*umask(ji,jj,jk) > 1.e-3 ) iindic = iindic + 1 1835 END DO 1836 ENDIF 1840 1837 END DO 1841 1838 END DO … … 1844 1841 ! --- South --- ! 1845 1842 IF(lk_south) THEN 1846 ispon = nn_sponge_len * Agrif_irhoy() 1847 jstart = nn_hls + 2! halo + land + 11843 ispon = nn_sponge_len * Agrif_irhoy() 1844 jstart = nn_hls + 1 ! halo + land + 1 1848 1845 jend = nn_hls + 1 + nbghostcells + ispon ! halo + land + nbghostcells + sponge 1849 istart = nn_hls + 21850 iend = jpiglo - nn_hls - 11846 istart = nn_hls + 1 1847 iend = jpiglo - nn_hls 1851 1848 DO jj = mj0(jstart), mj1(jend) 1852 1849 DO ji = mi0(istart), mi1(iend) 1853 1850 IF ( ABS(ht0_parent(ji,jj)-ht_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 1851 IF ( .NOT.ln_vert_remap) THEN 1852 DO jk = 1, jpkm1 1853 IF ( ABS(e3t0_parent(ji,jj,jk)-e3t_0(ji,jj,jk))*tmask(ji,jj,jk) > 1.e-3 ) iindic = iindic + 1 1854 END DO 1855 ENDIF 1854 1856 END DO 1855 1857 DO ji = mi0(istart), mi1(iend-1) 1856 1858 IF ( ABS(hu0_parent(ji,jj)-hu_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 1859 IF ( .NOT.ln_vert_remap) THEN 1860 DO jk = 1, jpkm1 1861 IF ( ABS(e3u0_parent(ji,jj,jk)-e3u_0(ji,jj,jk))*umask(ji,jj,jk) > 1.e-3 ) iindic = iindic + 1 1862 END DO 1863 ENDIF 1857 1864 END DO 1858 1865 END DO … … 1860 1867 DO ji = mi0(istart), mi1(iend) 1861 1868 IF ( ABS(hv0_parent(ji,jj)-hv_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 1869 IF ( .NOT.ln_vert_remap) THEN 1870 DO jk = 1, jpkm1 1871 IF ( ABS(e3v0_parent(ji,jj,jk)-e3v_0(ji,jj,jk))*vmask(ji,jj,jk) > 1.e-3 ) iindic = iindic + 1 1872 END DO 1873 ENDIF 1862 1874 END DO 1863 1875 END DO … … 1868 1880 ispon = nn_sponge_len * Agrif_irhoy() 1869 1881 jstart = jpjglo - ( nn_hls + nbghostcells + ispon) ! halo + land + nbghostcells +sponge - 1 1870 jend = jpjglo - ( nn_hls + 1 )! halo + land + 1 - 11871 istart = nn_hls + 21872 iend = jpiglo - nn_hls - 11882 jend = jpjglo - nn_hls ! halo + land + 1 - 1 1883 istart = nn_hls + 1 1884 iend = jpiglo - nn_hls 1873 1885 DO jj = mj0(jstart), mj1(jend) 1874 1886 DO ji = mi0(istart), mi1(iend) 1875 1887 IF ( ABS(ht0_parent(ji,jj)-ht_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 1888 IF ( .NOT.ln_vert_remap) THEN 1889 DO jk = 1, jpkm1 1890 IF ( ABS(e3t0_parent(ji,jj,jk)-e3t_0(ji,jj,jk))*tmask(ji,jj,jk) > 1.e-3 ) iindic = iindic + 1 1891 END DO 1892 ENDIF 1876 1893 END DO 1877 1894 DO ji = mi0(istart), mi1(iend-1) 1878 1895 IF ( ABS(hu0_parent(ji,jj)-hu_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 1879 END DO 1880 END DO 1881 DO jj = mj0(jstart+1), mj1(jend-1) 1896 IF ( .NOT.ln_vert_remap) THEN 1897 DO jk = 1, jpkm1 1898 IF ( ABS(e3u0_parent(ji,jj,jk)-e3u_0(ji,jj,jk))*umask(ji,jj,jk) > 1.e-3 ) iindic = iindic + 1 1899 END DO 1900 ENDIF 1901 END DO 1902 END DO 1903 DO jj = mj0(jstart), mj1(jend-1) 1882 1904 DO ji = mi0(istart), mi1(iend) 1883 1905 IF ( ABS(hv0_parent(ji,jj)-hv_0(ji,jj)) > 1.e-3 ) iindic = iindic + 1 1906 IF ( .NOT.ln_vert_remap) THEN 1907 DO jk = 1, jpkm1 1908 IF ( ABS(e3v0_parent(ji,jj,jk)-e3v_0(ji,jj,jk))*vmask(ji,jj,jk) > 1.e-3 ) iindic = iindic + 1 1909 END DO 1910 ENDIF 1884 1911 END DO 1885 1912 END DO -
NEMO/branches/2021/dev_r14608_AGRIF_domcfg/src/NST/agrif_oce_update.F90
r14227 r14641 1284 1284 !!---------------------------------------------------------------------- 1285 1285 ! 1286 IF (( .NOT.ln_agrif_2way ).OR.(.NOT.ln_chk_bathy).OR.(Agrif_Root())) RETURN 1286 IF (( .NOT.ln_agrif_2way ).OR.(.NOT.ln_chk_bathy) & 1287 & .OR.(.NOT.ln_vert_remap).OR.(Agrif_Root())) RETURN 1287 1288 ! 1288 1289 Agrif_UseSpecialValueInUpdate = .FALSE. -
NEMO/branches/2021/dev_r14608_AGRIF_domcfg/src/NST/agrif_user.F90
r14619 r14641 120 120 ! 3. Location of interpolation 121 121 !----------------------------- 122 ! CALL Agrif_Set_bc( e3t_id, (/-nn_sponge_len*imaxrho,ind1-1/) ) 123 ! JC: check near the boundary only until matching in sponge has been sorted out: 124 CALL Agrif_Set_bc( e3t_id, (/0,ind1-1/) ) 122 CALL Agrif_Set_bc( e3t_id, (/-nn_sponge_len*imaxrho-2,ind1-1/) ) 125 123 126 124 ! extend the interpolation zone by 1 more point than necessary: 127 125 ! RB check here 128 CALL Agrif_Set_bc( e3t0_interp_id, (/-nn_sponge_len*imaxrho-2,ind1/) ) 129 CALL Agrif_Set_bc( mbkt_id, (/-nn_sponge_len*imaxrho-2,ind1/) ) 130 CALL Agrif_Set_bc( ht0_id, (/-nn_sponge_len*imaxrho-2,ind1/) ) 126 CALL Agrif_Set_bc( e3t0_interp_id, (/-nn_sponge_len*imaxrho-2,ind1-1/) ) 127 CALL Agrif_Set_bc( mbkt_id, (/-nn_sponge_len*imaxrho-2,ind1-1/) ) 128 CALL Agrif_Set_bc( ht0_id, (/-nn_sponge_len*imaxrho-2,ind1-1/) ) 129 131 130 CALL Agrif_Set_bc( tsini_id, (/0,ind1-1/) ) ! if west, rhox=3 and nbghost=3: columns 2 to 4 132 131 CALL Agrif_Set_bc( uini_id, (/0,ind1-1/) ) … … 222 221 ! 223 222 ! Build "intermediate" parent vertical grid on child domain 224 IF ( ln_vert_remap ) THEN 225 226 jpk_parent = Agrif_parent( jpk ) 227 ALLOCATE(e3t0_parent(jpi,jpj,jpk_parent), & 228 & e3u0_parent(jpi,jpj,jpk_parent), & 229 & e3v0_parent(jpi,jpj,jpk_parent), STAT = ierr) 230 IF( ierr > 0 ) CALL ctl_warn('Agrif_Init_Domain: allocation of arrays failed') 223 jpk_parent = Agrif_parent( jpk ) 224 ALLOCATE(e3t0_parent(jpi,jpj,jpk_parent), & 225 & e3u0_parent(jpi,jpj,jpk_parent), & 226 & e3v0_parent(jpi,jpj,jpk_parent), STAT = ierr) 227 IF( ierr > 0 ) CALL ctl_warn('Agrif_Init_Domain: allocation of arrays failed') 231 228 232 ! Retrieve expected parent scale factors on child grid: 233 Agrif_UseSpecialValue = .FALSE. 234 e3t0_parent(:,:,:) = 0._wp 235 CALL Agrif_Init_Variable(e3t0_interp_id, procname=interpe3t0_vremap) 236 ! 237 ! Deduce scale factors at U and V points: 238 DO_3D( 0, 0, 0, 0, 1, jpk_parent ) 239 e3u0_parent(ji,jj,jk) = 0.5_wp * (e3t0_parent(ji,jj,jk) + e3t0_parent(ji+1,jj ,jk)) 240 e3v0_parent(ji,jj,jk) = 0.5_wp * (e3t0_parent(ji,jj,jk) + e3t0_parent(ji ,jj+1,jk)) 241 END_3D 242 243 ! Assume a step at the bottom except if (pure) s-coordinates 244 IF ( .NOT.Agrif_Parent(ln_sco) ) THEN 245 DO_2D( 1, 0, 1, 0 ) 246 jk = mbku_parent(ji,jj) 247 e3u0_parent(ji,jj,jk) = MIN(e3t0_parent(ji,jj,jk), e3t0_parent(ji+1,jj ,jk)) 248 jk = mbkv_parent(ji,jj) 249 e3v0_parent(ji,jj,jk) = MIN(e3t0_parent(ji,jj,jk), e3t0_parent(ji ,jj+1,jk)) 250 END_2D 251 ENDIF 252 253 CALL lbc_lnk( 'Agrif_Init_Domain', e3u0_parent, 'U', 1.0_wp, e3v0_parent, 'V', 1.0_wp ) 254 ENDIF 229 ! Retrieve expected parent scale factors on child grid: 230 Agrif_UseSpecialValue = .FALSE. 231 e3t0_parent(:,:,:) = 0._wp 232 CALL Agrif_Init_Variable(e3t0_interp_id, procname=interpe3t0_vremap) 233 ! 234 ! Deduce scale factors at U and V points: 235 DO_3D( 0, 0, 0, 0, 1, jpk_parent ) 236 e3u0_parent(ji,jj,jk) = 0.5_wp * (e3t0_parent(ji,jj,jk) + e3t0_parent(ji+1,jj ,jk)) 237 e3v0_parent(ji,jj,jk) = 0.5_wp * (e3t0_parent(ji,jj,jk) + e3t0_parent(ji ,jj+1,jk)) 238 END_3D 239 240 ! Assume a step at the bottom except if (pure) s-coordinates 241 IF ( .NOT.Agrif_Parent(ln_sco) ) THEN 242 DO_2D( 1, 0, 1, 0 ) 243 jk = mbku_parent(ji,jj) 244 e3u0_parent(ji,jj,jk) = MIN(e3t0_parent(ji,jj,jk), e3t0_parent(ji+1,jj ,jk)) 245 jk = mbkv_parent(ji,jj) 246 e3v0_parent(ji,jj,jk) = MIN(e3t0_parent(ji,jj,jk), e3t0_parent(ji ,jj+1,jk)) 247 END_2D 248 ENDIF 249 250 CALL lbc_lnk( 'Agrif_Init_Domain', e3u0_parent, 'U', 1.0_wp, e3v0_parent, 'V', 1.0_wp ) 255 251 256 252 ! check if masks and bathymetries match … … 262 258 ! 263 259 kindic_agr = 0 264 IF( .NOT. ln_vert_remap ) THEN 265 ! 266 ! check if tmask and vertical scale factors agree with parent in sponge area: 267 CALL Agrif_Bc_variable(e3t_id,calledweight=1.,procname=interpe3t) 268 ! 269 ELSE 270 ! 271 ! In case of vertical interpolation, check only that total depths agree between child and parent: 272 273 CALL Agrif_check_bat( kindic_agr ) 274 ENDIF 260 ! 261 CALL Agrif_check_bat( kindic_agr ) 275 262 ! 276 263 CALL mpp_sum( 'agrif_InitValues_Domain', kindic_agr ) … … 287 274 WHERE (ssmask(:,:) == 0._wp) mbkt_parent(:,:) = 0 288 275 ! 276 IF ( .NOT.ln_vert_remap ) DEALLOCATE(e3t0_parent, e3u0_parent, e3v0_parent) 277 289 278 END SUBROUTINE Agrif_Init_Domain 290 279
Note: See TracChangeset
for help on using the changeset viewer.