- Timestamp:
- 2014-03-26T12:02:30+01:00 (10 years ago)
- Location:
- branches/2014/dev_CNRS0_NOC1_LDF/NEMOGCM/NEMO/OPA_SRC/DOM
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2014/dev_CNRS0_NOC1_LDF/NEMOGCM/NEMO/OPA_SRC/DOM/domzgr.F90
r4292 r4596 622 622 !! - update bathy : meter bathymetry (in meters) 623 623 !!---------------------------------------------------------------------- 624 !!625 624 INTEGER :: ji, jj, jl ! dummy loop indices 626 625 INTEGER :: icompt, ibtest, ikmax ! temporary integers 627 626 REAL(wp), POINTER, DIMENSION(:,:) :: zbathy 628 629 627 !!---------------------------------------------------------------------- 630 628 ! … … 1115 1113 !! 1116 1114 !!---------------------------------------------------------------------- 1117 !1118 1115 INTEGER :: ji, jj, jk, jl ! dummy loop argument 1119 INTEGER :: iip1, ijp1, iim1, ijm1 ! temporaryintegers1116 INTEGER :: iip1, ijp1, iim1, ijm1 ! local integers 1120 1117 INTEGER :: ios ! Local integer output status for namelist read 1121 REAL(wp) :: zrmax, ztaper ! temporary scalars 1122 REAL(wp) :: zrfact 1118 REAL(wp) :: zrmax, ztaper, zrfact ! local scalars 1123 1119 ! 1124 1120 REAL(wp), POINTER, DIMENSION(:,: ) :: ztmpi1, ztmpi2, ztmpj1, ztmpj2 … … 1283 1279 DO jj = 1, jpj 1284 1280 DO ji = 1, jpi 1285 ztaper = EXP( -(gphit(ji,jj)/8._wp)**2 ._wp)1281 ztaper = EXP( -(gphit(ji,jj)/8._wp)**2 ) 1286 1282 hbatt(ji,jj) = rn_sbot_max * ztaper + hbatt(ji,jj) * ( 1._wp - ztaper ) 1287 1283 END DO … … 1552 1548 END SUBROUTINE zgr_sco 1553 1549 1554 !!====================================================================== 1550 1555 1551 SUBROUTINE s_sh94() 1556 1557 1552 !!---------------------------------------------------------------------- 1558 1553 !! *** ROUTINE s_sh94 *** … … 1565 1560 !! Reference : Song and Haidvogel 1994. 1566 1561 !!---------------------------------------------------------------------- 1567 !1568 1562 INTEGER :: ji, jj, jk ! dummy loop argument 1569 1563 REAL(wp) :: zcoeft, zcoefw ! temporary scalars … … 1651 1645 END SUBROUTINE s_sh94 1652 1646 1647 1653 1648 SUBROUTINE s_sf12 1654 1655 1649 !!---------------------------------------------------------------------- 1656 1650 !! *** ROUTINE s_sf12 *** … … 1666 1660 !! 1667 1661 !! 1668 !! Reference : Siddorn and Furner 2012 (submitted Ocean modelling). 1669 !!---------------------------------------------------------------------- 1670 ! 1662 !! Reference : Siddorn and Furner 2013 (Ocean modelling). 1663 !!---------------------------------------------------------------------- 1671 1664 INTEGER :: ji, jj, jk ! dummy loop argument 1672 1665 REAL(wp) :: zsmth ! smoothing around critical depth … … 1674 1667 ! 1675 1668 REAL(wp), POINTER, DIMENSION(:,:,:) :: z_gsigw3, z_gsigt3, z_gsi3w3 1676 REAL(wp), POINTER, DIMENSION(:,:,:) :: z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 1677 1669 REAL(wp), POINTER, DIMENSION(:,:,:) :: z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 1670 !!---------------------------------------------------------------------- 1678 1671 ! 1679 1672 CALL wrk_alloc( jpi, jpj, jpk, z_gsigw3, z_gsigt3, z_gsi3w3 ) … … 1744 1737 END DO 1745 1738 1746 END DO ! for all jj's1747 END DO ! for all ji's1739 END DO ! for all jj's 1740 END DO ! for all ji's 1748 1741 1749 1742 DO ji=1,jpi-1 … … 1773 1766 END DO 1774 1767 1775 END DO1776 END DO1768 END DO 1769 END DO 1777 1770 ! 1778 1771 CALL lbc_lnk(e3t_0 ,'T',1.) ; CALL lbc_lnk(e3u_0 ,'T',1.) … … 1788 1781 END SUBROUTINE s_sf12 1789 1782 1783 1790 1784 SUBROUTINE s_tanh() 1791 1792 1785 !!---------------------------------------------------------------------- 1793 1786 !! *** ROUTINE s_tanh*** … … 1799 1792 !! Reference : Madec, Lott, Delecluse and Crepon, 1996. JPO, 26, 1393-1408. 1800 1793 !!---------------------------------------------------------------------- 1801 1802 1794 INTEGER :: ji, jj, jk ! dummy loop argument 1803 1795 REAL(wp) :: zcoeft, zcoefw ! temporary scalars 1804 1796 ! 1805 1797 REAL(wp), POINTER, DIMENSION(:) :: z_gsigw, z_gsigt, z_gsi3w 1806 1798 REAL(wp), POINTER, DIMENSION(:) :: z_esigt, z_esigw 1799 !!---------------------------------------------------------------------- 1807 1800 1808 1801 CALL wrk_alloc( jpk, z_gsigw, z_gsigt, z_gsi3w ) … … 1862 1855 END SUBROUTINE s_tanh 1863 1856 1857 1864 1858 FUNCTION fssig( pk ) RESULT( pf ) 1865 1859 !!---------------------------------------------------------------------- … … 1932 1926 REAL(wp), INTENT(in ) :: pk1(jpk) ! continuous "k" coordinate 1933 1927 REAL(wp) :: p_gamma(jpk) ! stretched coordinate 1934 REAL(wp), INTENT(in ) :: pzb ! Bottom box depth 1935 REAL(wp), INTENT(in ) :: pzs ! surface box depth 1936 REAL(wp), INTENT(in ) :: psmth ! Smoothing parameter 1928 REAL(wp), INTENT(in ) :: pzb ! Bottom box depth 1929 REAL(wp), INTENT(in ) :: pzs ! surface box depth 1930 REAL(wp), INTENT(in ) :: psmth ! Smoothing parameter 1931 ! 1932 INTEGER :: jk 1937 1933 REAL(wp) :: za1,za2,za3 ! local variables 1938 1934 REAL(wp) :: zn1,zn2 ! local variables 1939 1935 REAL(wp) :: za,zb,zx ! local variables 1940 integer :: jk 1941 !!---------------------------------------------------------------------- 1942 ! 1943 1936 !!---------------------------------------------------------------------- 1937 ! 1944 1938 zn1 = 1./(jpk-1.) 1945 1939 zn2 = 1. - zn1 1946 1940 ! 1947 1941 za1 = (rn_alpha+2.0_wp)*zn1**(rn_alpha+1.0_wp)-(rn_alpha+1.0_wp)*zn1**(rn_alpha+2.0_wp) 1948 1942 za2 = (rn_alpha+2.0_wp)*zn2**(rn_alpha+1.0_wp)-(rn_alpha+1.0_wp)*zn2**(rn_alpha+2.0_wp) 1949 1943 za3 = (zn2**3.0_wp - za2)/( zn1**3.0_wp - za1) 1950 1944 ! 1951 1945 za = pzb - za3*(pzs-za1)-za2 1952 1946 za = za/( zn2-0.5_wp*(za2+zn2**2.0_wp) - za3*(zn1-0.5_wp*(za1+zn1**2.0_wp) ) ) 1953 1947 zb = (pzs - za1 - za*( zn1-0.5_wp*(za1+zn1**2.0_wp ) ) ) / (zn1**3.0_wp - za1) 1954 1948 zx = 1.0_wp-za/2.0_wp-zb 1955 1949 ! 1956 1950 DO jk = 1, jpk 1957 1951 p_gamma(jk) = za*(pk1(jk)*(1.0_wp-pk1(jk)/2.0_wp))+zb*pk1(jk)**3.0_wp + & … … 1959 1953 & (rn_alpha+1.0_wp)*pk1(jk)**(rn_alpha+2.0_wp) ) 1960 1954 p_gamma(jk) = p_gamma(jk)*psmth+pk1(jk)*(1.0_wp-psmth) 1961 ENDDO 1962 1955 END DO 1963 1956 ! 1964 1957 END FUNCTION fgamma -
branches/2014/dev_CNRS0_NOC1_LDF/NEMOGCM/NEMO/OPA_SRC/DOM/istate.F90
r4370 r4596 29 29 USE daymod ! calendar 30 30 USE eosbn2 ! eq. of state, Brunt Vaisala frequency (eos routine) 31 USE ldftra _oce ! ocean active tracers: lateral physics31 USE ldftra ! lateral physics: ocean active tracers 32 32 USE zdf_oce ! ocean vertical physics 33 33 USE phycst ! physical constants 34 34 USE dtatsd ! data temperature and salinity (dta_tsd routine) 35 35 USE dtauvd ! data: U & V current (dta_uvd routine) 36 USE in_out_manager ! I/O manager37 USE iom ! I/O library38 36 USE zpshde ! partial step: hor. derivative (zps_hde routine) 39 37 USE eosbn2 ! equation of state (eos bn2 routine) … … 42 40 USE dynspg_flt ! filtered free surface 43 41 USE sol_oce ! ocean solver variables 42 ! 43 USE in_out_manager ! I/O manager 44 USE iom ! I/O library 44 45 USE lib_mpp ! MPP library 45 46 USE restart ! restart … … 68 69 !! ** Purpose : Initialization of the dynamics and tracer fields. 69 70 !!---------------------------------------------------------------------- 70 ! - ML - needed for initialization of e3t_b 71 INTEGER :: ji,jj,jk ! dummy loop indices 72 REAL(wp), POINTER, DIMENSION(:,:,:,:) :: zuvd ! U & V data workspace 71 INTEGER :: ji, jj, jk ! dummy loop indices 72 REAL(wp), POINTER, DIMENSION(:,:,:,:) :: zuvd ! U & V data workspace 73 73 !!---------------------------------------------------------------------- 74 74 ! 75 75 IF( nn_timing == 1 ) CALL timing_start('istate_init') 76 76 ! 77 78 77 IF(lwp) WRITE(numout,*) 79 78 IF(lwp) WRITE(numout,*) 'istate_ini : Initialization of the dynamics and tracers' 80 79 IF(lwp) WRITE(numout,*) '~~~~~~~~~~' 81 80 82 CALL dta_tsd_init! Initialisation of T & S input data83 IF( lk_c1d ) CALL dta_uvd_init! Initialization of U & V input data84 85 rhd (:,:,: ) = 0. e086 rhop (:,:,: ) = 0. e087 rn2 (:,:,: ) = 0. e088 tsa (:,:,:,:) = 0. e081 CALL dta_tsd_init ! Initialisation of T & S input data 82 IF( lk_c1d ) CALL dta_uvd_init ! Initialization of U & V input data 83 84 rhd (:,:,: ) = 0._wp 85 rhop (:,:,: ) = 0._wp 86 rn2 (:,:,: ) = 0._wp 87 tsa (:,:,:,:) = 0._wp 89 88 90 89 IF( ln_rstart ) THEN ! Restart from a file … … 103 102 ub (:,:,:) = 0._wp ; un (:,:,:) = 0._wp 104 103 vb (:,:,:) = 0._wp ; vn (:,:,:) = 0._wp 105 rotb (:,:,:) = 0._wp ; rotn (:,:,:) = 0._wp 106 hdivb(:,:,:) = 0._wp ; hdivn(:,:,:) = 0._wp 104 hdivn(:,:,:) = 0._wp 107 105 ! 108 106 IF( cp_cfg == 'eel' ) THEN … … 158 156 ! 159 157 ! 160 un_b(:,:) = 0._wp ;vn_b(:,:) = 0._wp161 ub_b(:,:) = 0._wp ;vb_b(:,:) = 0._wp158 un_b(:,:) = 0._wp ; vn_b(:,:) = 0._wp 159 ub_b(:,:) = 0._wp ; vb_b(:,:) = 0._wp 162 160 ! 163 161 DO jk = 1, jpkm1 164 #if defined key_vectopt_loop165 DO jj = 1, 1 !Vector opt. => forced unrolling166 DO ji = 1, jpij167 #else168 162 DO jj = 1, jpj 169 163 DO ji = 1, jpi 170 #endif171 164 un_b(ji,jj) = un_b(ji,jj) + fse3u_n(ji,jj,jk) * un(ji,jj,jk) * umask(ji,jj,jk) 172 165 vn_b(ji,jj) = vn_b(ji,jj) + fse3v_n(ji,jj,jk) * vn(ji,jj,jk) * vmask(ji,jj,jk) … … 188 181 ! 189 182 END SUBROUTINE istate_init 183 190 184 191 185 SUBROUTINE istate_t_s … … 201 195 !! References : Philander ??? 202 196 !!---------------------------------------------------------------------- 203 INTEGER :: ji, jj, jk204 REAL(wp) :: zsal = 35.50 197 INTEGER :: ji, jj, jk 198 REAL(wp) :: zsal = 35.50_wp 205 199 !!---------------------------------------------------------------------- 206 200 ! … … 218 212 ! 219 213 END SUBROUTINE istate_t_s 214 220 215 221 216 SUBROUTINE istate_eel … … 231 226 !! and relative vorticity fields 232 227 !!---------------------------------------------------------------------- 233 USE div cur ! hor. divergence & rel. vorticity (div_cur routine)228 USE divhor ! hor. divergence (div_hor routine) 234 229 USE iom 235 230 ! 236 231 INTEGER :: inum ! temporary logical unit 237 232 INTEGER :: ji, jj, jk ! dummy loop indices … … 280 275 tsb(:,:,:,jp_sal) = tsn(:,:,:,jp_sal) 281 276 ! 282 ! set the dynamics: U,V, hdiv , rot(and ssh if necessary)277 ! set the dynamics: U,V, hdiv (and ssh if necessary) 283 278 ! ---------------- 284 279 ! Start EEL5 configuration with barotropic geostrophic velocities … … 316 311 ENDIF 317 312 ! 318 CALL div_ cur( nit000 ) ! horizontal divergence and relative vorticity (curl)313 CALL div_hor( nit000 ) ! horizontal divergence and relative vorticity (curl) 319 314 ! N.B. the vertical velocity will be computed from the horizontal divergence field 320 315 ! in istate by a call to wzv routine … … 369 364 !! 370 365 !! ** Method : - set temprature field 371 !! - set salinity field366 !! - set salinity field 372 367 !!---------------------------------------------------------------------- 373 368 INTEGER :: ji, jj, jk ! dummy loop indices … … 443 438 END SUBROUTINE istate_gyre 444 439 440 445 441 SUBROUTINE istate_uvg 446 442 !!---------------------------------------------------------------------- … … 455 451 !!---------------------------------------------------------------------- 456 452 USE dynspg ! surface pressure gradient (dyn_spg routine) 457 USE div cur ! hor. divergence & rel. vorticity (div_cur routine)453 USE divhor ! hor. divergence (div_hor routine) 458 454 USE lbclnk ! ocean lateral boundary condition (or mpp link) 459 455 ! 460 456 INTEGER :: ji, jj, jk ! dummy loop indices 461 457 INTEGER :: indic ! ??? … … 553 549 un(:,:,:) = ub(:,:,:) 554 550 vn(:,:,:) = vb(:,:,:) 555 556 ! Compute the divergence and curl 557 558 CALL div_cur( nit000 ) ! now horizontal divergence and curl 559 560 hdivb(:,:,:) = hdivn(:,:,:) ! set the before to the now value 561 rotb (:,:,:) = rotn (:,:,:) ! set the before to the now value 551 ! 552 !!gm Check here call to div_hor should not be necessary 553 !!gm div_hor call runoffs not sure they are defined at that level 554 CALL div_hor( nit000 ) ! now horizontal divergence 562 555 ! 563 556 CALL wrk_dealloc( jpi, jpj, jpk, zprn)
Note: See TracChangeset
for help on using the changeset viewer.