- Timestamp:
- 2015-12-08T12:39:53+01:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/icebergs_restart_single_file/NEMOGCM/NEMO/OPA_SRC/DIA/diawri.F90
r6019 r6020 17 17 !! ! 2005-11 (V. Garnier) Surface pressure gradient organization 18 18 !! 3.2 ! 2008-11 (B. Lemaire) creation from old diawri 19 !! 3.7 ! 2014-01 (G. Madec) remove eddy induced velocity from no-IOM output 20 !! ! change name of output variables in dia_wri_state 19 21 !!---------------------------------------------------------------------- 20 22 … … 27 29 USE dynadv, ONLY: ln_dynadv_vec 28 30 USE zdf_oce ! ocean vertical physics 29 USE ldftra_oce ! ocean active tracers: lateral physics 30 USE ldfdyn_oce ! ocean dynamics: lateral physics 31 USE traldf_iso_grif, ONLY : psix_eiv, psiy_eiv 32 USE sol_oce ! solver variables 31 USE ldftra ! lateral physics: eddy diffusivity coef. 33 32 USE sbc_oce ! Surface boundary condition: ocean fields 34 33 USE sbc_ice ! Surface boundary condition: ice fields … … 46 45 USE iom 47 46 USE ioipsl 48 USE dynspg_oce, ONLY: un_adv, vn_adv ! barotropic velocities49 47 50 48 #if defined key_lim2 … … 206 204 CALL iom_put( "sbu", z2d ) ! bottom i-current 207 205 ENDIF 208 #if defined key_dynspg_ts 209 CALL iom_put( "ubar", un_adv(:,:) ) ! barotropic i-current 210 #else 211 CALL iom_put( "ubar", un_b(:,:) ) ! barotropic i-current 212 #endif 206 207 IF ( ln_dynspg_ts ) THEN 208 CALL iom_put( "ubar", un_adv(:,:) ) ! barotropic i-current 209 ELSE 210 CALL iom_put( "ubar", un_b(:,:) ) ! barotropic i-current 211 ENDIF 213 212 214 213 CALL iom_put( "voce", vn(:,:,:) ) ! 3D j-current … … 223 222 CALL iom_put( "sbv", z2d ) ! bottom j-current 224 223 ENDIF 225 #if defined key_dynspg_ts 226 CALL iom_put( "vbar", vn_adv(:,:) ) ! barotropic j-current 227 #else 228 CALL iom_put( "vbar", vn_b(:,:) ) ! barotropic j-current 229 #endif 224 225 IF ( ln_dynspg_ts ) THEN 226 CALL iom_put( "vbar", vn_adv(:,:) ) ! barotropic j-current 227 ELSE 228 CALL iom_put( "vbar", vn_b(:,:) ) ! barotropic j-current 229 ENDIF 230 230 231 231 CALL iom_put( "woce", wn ) ! vertical velocity 232 232 IF( iom_use('w_masstr') .OR. iom_use('w_masstr2') ) THEN ! vertical mass transport & its square value 233 233 ! Caution: in the VVL case, it only correponds to the baroclinic mass transport. 234 z2d(:,:) = rau0 * e1 2t(:,:)234 z2d(:,:) = rau0 * e1e2t(:,:) 235 235 DO jk = 1, jpk 236 236 z3d(:,:,jk) = wn(:,:,jk) * z2d(:,:) … … 247 247 DO jj = 2, jpjm1 ! sst gradient 248 248 DO ji = fs_2, fs_jpim1 ! vector opt. 249 zztmp 250 zztmpx = ( tsn(ji+1,jj ,1,jp_tem) - zztmp ) / e1u(ji,jj) + ( zztmp - tsn(ji-1,jj ,1,jp_tem) ) / e1u(ji-1,jj)251 zztmpy = ( tsn(ji ,jj+1,1,jp_tem) - zztmp ) / e2v(ji,jj) + ( zztmp - tsn(ji ,jj-1,1,jp_tem) ) / e2v(ji,jj-1)249 zztmp = tsn(ji,jj,1,jp_tem) 250 zztmpx = ( tsn(ji+1,jj,1,jp_tem) - zztmp ) * r1_e1u(ji,jj) + ( zztmp - tsn(ji-1,jj ,1,jp_tem) ) * r1_e1u(ji-1,jj) 251 zztmpy = ( tsn(ji,jj+1,1,jp_tem) - zztmp ) * r1_e2v(ji,jj) + ( zztmp - tsn(ji ,jj-1,1,jp_tem) ) * r1_e2v(ji,jj-1) 252 252 z2d(ji,jj) = 0.25 * ( zztmpx * zztmpx + zztmpy * zztmpy ) & 253 253 & * umask(ji,jj,1) * umask(ji-1,jj,1) * vmask(ji,jj,1) * umask(ji,jj-1,1) … … 401 401 !! Each nwrite time step, output the instantaneous or mean fields 402 402 !!---------------------------------------------------------------------- 403 !! 404 INTEGER, INTENT( in ) :: kt ! ocean time-step index 405 !! 403 INTEGER, INTENT( in ) :: kt ! ocean time-step index 404 ! 406 405 LOGICAL :: ll_print = .FALSE. ! =T print and flush numout 407 406 CHARACTER (len=40) :: clhstnam, clop, clmx ! local names … … 412 411 INTEGER :: jn, ierror ! local integers 413 412 REAL(wp) :: zsto, zout, zmax, zjulian, zdt ! local scalars 414 ! !413 ! 415 414 REAL(wp), POINTER, DIMENSION(:,:) :: zw2d ! 2D workspace 416 415 REAL(wp), POINTER, DIMENSION(:,:,:) :: zw3d ! 3D workspace … … 419 418 IF( nn_timing == 1 ) CALL timing_start('dia_wri') 420 419 ! 421 CALL wrk_alloc( jpi ,jpj , zw2d )422 IF ( ln_traldf_gdia .OR. lk_vvl ) call wrk_alloc( jpi , jpj ,jpk , zw3d )420 CALL wrk_alloc( jpi,jpj , zw2d ) 421 IF( lk_vvl ) CALL wrk_alloc( jpi,jpj,jpk , zw3d ) 423 422 ! 424 423 ! Output the initial state and forcings … … 438 437 zdt = rdt 439 438 IF( nacc == 1 ) zdt = rdtmin 440 IF( ln_mskland ) THEN ; clop = "only(x)" ! put 1.e+20 on land (very expensive!!) 441 ELSE ; clop = "x" ! no use of the mask value (require less cpu time) 442 ENDIF 439 clop = "x" ! no use of the mask value (require less cpu time and otherwise the model crashes) 443 440 #if defined key_diainstant 444 441 zsto = nwrite * zdt … … 659 656 660 657 clmx ="l_max(only(x))" ! max index on a period 661 CALL histdef( nid_T, "sobowlin", "Bowl Index" , "W-point", & ! bowl INDEX662 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clmx, zsto, zout )658 ! CALL histdef( nid_T, "sobowlin", "Bowl Index" , "W-point", & ! bowl INDEX 659 ! & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clmx, zsto, zout ) 663 660 #if defined key_diahth 664 661 CALL histdef( nid_T, "sothedep", "Thermocline Depth" , "m" , & ! hth … … 684 681 CALL histdef( nid_U, "vozocrtx", "Zonal Current" , "m/s" , & ! un 685 682 & jpi, jpj, nh_U, ipk, 1, ipk, nz_U, 32, clop, zsto, zout ) 686 IF( ln_traldf_gdia ) THEN687 CALL histdef( nid_U, "vozoeivu", "Zonal EIV Current" , "m/s" , & ! u_eiv688 & jpi, jpj, nh_U, ipk, 1, ipk, nz_U, 32, clop, zsto, zout )689 ELSE690 #if defined key_diaeiv691 CALL histdef( nid_U, "vozoeivu", "Zonal EIV Current" , "m/s" , & ! u_eiv692 & jpi, jpj, nh_U, ipk, 1, ipk, nz_U, 32, clop, zsto, zout )693 #endif694 END IF695 683 ! !!! nid_U : 2D 696 684 CALL histdef( nid_U, "sozotaux", "Wind Stress along i-axis" , "N/m2" , & ! utau … … 702 690 CALL histdef( nid_V, "vomecrty", "Meridional Current" , "m/s" , & ! vn 703 691 & jpi, jpj, nh_V, ipk, 1, ipk, nz_V, 32, clop, zsto, zout ) 704 IF( ln_traldf_gdia ) THEN705 CALL histdef( nid_V, "vomeeivv", "Meridional EIV Current" , "m/s" , & ! v_eiv706 & jpi, jpj, nh_V, ipk, 1, ipk, nz_V, 32, clop, zsto, zout )707 ELSE708 #if defined key_diaeiv709 CALL histdef( nid_V, "vomeeivv", "Meridional EIV Current" , "m/s" , & ! v_eiv710 & jpi, jpj, nh_V, ipk, 1, ipk, nz_V, 32, clop, zsto, zout )711 #endif712 END IF713 692 ! !!! nid_V : 2D 714 693 CALL histdef( nid_V, "sometauy", "Wind Stress along j-axis" , "N/m2" , & ! vtau … … 720 699 CALL histdef( nid_W, "vovecrtz", "Vertical Velocity" , "m/s" , & ! wn 721 700 & jpi, jpj, nh_W, ipk, 1, ipk, nz_W, 32, clop, zsto, zout ) 722 IF( ln_traldf_gdia ) THEN723 CALL histdef( nid_W, "voveeivw", "Vertical EIV Velocity" , "m/s" , & ! w_eiv724 & jpi, jpj, nh_W, ipk, 1, ipk, nz_W, 32, clop, zsto, zout )725 ELSE726 #if defined key_diaeiv727 CALL histdef( nid_W, "voveeivw", "Vertical EIV Velocity" , "m/s" , & ! w_eiv728 & jpi, jpj, nh_W, ipk, 1, ipk, nz_W, 32, clop, zsto, zout )729 #endif730 END IF731 701 CALL histdef( nid_W, "votkeavt", "Vertical Eddy Diffusivity" , "m2/s" , & ! avt 732 702 & jpi, jpj, nh_W, ipk, 1, ipk, nz_W, 32, clop, zsto, zout ) … … 739 709 ENDIF 740 710 ! !!! nid_W : 2D 741 #if defined key_traldf_c2d742 CALL histdef( nid_W, "soleahtw", "lateral eddy diffusivity" , "m2/s" , & ! ahtw743 & jpi, jpj, nh_W, 1 , 1, 1 , - 99, 32, clop, zsto, zout )744 # if defined key_traldf_eiv745 CALL histdef( nid_W, "soleaeiw", "eddy induced vel. coeff. at w-point", "m2/s", & ! aeiw746 & jpi, jpj, nh_W, 1 , 1, 1 , - 99, 32, clop, zsto, zout )747 # endif748 #endif749 750 711 CALL histend( nid_W, snc4chunks=snc4set ) 751 712 … … 855 816 856 817 CALL histwrite( nid_U, "vozocrtx", it, un , ndim_U , ndex_U ) ! i-current 857 IF( ln_traldf_gdia ) THEN858 IF (.not. ALLOCATED(psix_eiv))THEN859 ALLOCATE( psix_eiv(jpi,jpj,jpk) , psiy_eiv(jpi,jpj,jpk) , STAT=ierr )860 IF( lk_mpp ) CALL mpp_sum ( ierr )861 IF( ierr > 0 ) CALL ctl_stop('STOP', 'diawri: unable to allocate psi{x,y}_eiv')862 psix_eiv(:,:,:) = 0.0_wp863 psiy_eiv(:,:,:) = 0.0_wp864 ENDIF865 DO jk=1,jpkm1866 zw3d(:,:,jk) = (psix_eiv(:,:,jk+1) - psix_eiv(:,:,jk))/fse3u(:,:,jk) ! u_eiv = -dpsix/dz867 END DO868 zw3d(:,:,jpk) = 0._wp869 CALL histwrite( nid_U, "vozoeivu", it, zw3d, ndim_U , ndex_U ) ! i-eiv current870 ELSE871 #if defined key_diaeiv872 CALL histwrite( nid_U, "vozoeivu", it, u_eiv, ndim_U , ndex_U ) ! i-eiv current873 #endif874 ENDIF875 818 CALL histwrite( nid_U, "sozotaux", it, utau , ndim_hU, ndex_hU ) ! i-wind stress 876 819 877 820 CALL histwrite( nid_V, "vomecrty", it, vn , ndim_V , ndex_V ) ! j-current 878 IF( ln_traldf_gdia ) THEN879 DO jk=1,jpk-1880 zw3d(:,:,jk) = (psiy_eiv(:,:,jk+1) - psiy_eiv(:,:,jk))/fse3v(:,:,jk) ! v_eiv = -dpsiy/dz881 END DO882 zw3d(:,:,jpk) = 0._wp883 CALL histwrite( nid_V, "vomeeivv", it, zw3d, ndim_V , ndex_V ) ! j-eiv current884 ELSE885 #if defined key_diaeiv886 CALL histwrite( nid_V, "vomeeivv", it, v_eiv, ndim_V , ndex_V ) ! j-eiv current887 #endif888 ENDIF889 821 CALL histwrite( nid_V, "sometauy", it, vtau , ndim_hV, ndex_hV ) ! j-wind stress 890 822 891 823 CALL histwrite( nid_W, "vovecrtz", it, wn , ndim_T, ndex_T ) ! vert. current 892 IF( ln_traldf_gdia ) THEN893 DO jk=1,jpk-1894 DO jj = 2, jpjm1895 DO ji = fs_2, fs_jpim1 ! vector opt.896 zw3d(ji,jj,jk) = (psiy_eiv(ji,jj,jk) - psiy_eiv(ji,jj-1,jk))/e2v(ji,jj) + &897 & (psix_eiv(ji,jj,jk) - psix_eiv(ji-1,jj,jk))/e1u(ji,jj) ! w_eiv = dpsiy/dy + dpsiy/dx898 END DO899 END DO900 END DO901 zw3d(:,:,jpk) = 0._wp902 CALL histwrite( nid_W, "voveeivw", it, zw3d , ndim_T, ndex_T ) ! vert. eiv current903 ELSE904 # if defined key_diaeiv905 CALL histwrite( nid_W, "voveeivw", it, w_eiv , ndim_T, ndex_T ) ! vert. eiv current906 # endif907 ENDIF908 824 CALL histwrite( nid_W, "votkeavt", it, avt , ndim_T, ndex_T ) ! T vert. eddy diff. coef. 909 825 CALL histwrite( nid_W, "votkeavm", it, avmu , ndim_T, ndex_T ) ! T vert. eddy visc. coef. … … 911 827 CALL histwrite( nid_W, "voddmavs", it, fsavs(:,:,:), ndim_T, ndex_T ) ! S vert. eddy diff. coef. 912 828 ENDIF 913 #if defined key_traldf_c2d914 CALL histwrite( nid_W, "soleahtw", it, ahtw , ndim_hT, ndex_hT ) ! lateral eddy diff. coef.915 # if defined key_traldf_eiv916 CALL histwrite( nid_W, "soleaeiw", it, aeiw , ndim_hT, ndex_hT ) ! EIV coefficient at w-point917 # endif918 #endif919 829 920 830 ! 3. Close all files … … 927 837 ENDIF 928 838 ! 929 CALL wrk_dealloc( jpi , jpj, zw2d )930 IF ( ln_traldf_gdia .OR. lk_vvl ) callwrk_dealloc( jpi , jpj , jpk , zw3d )839 CALL wrk_dealloc( jpi , jpj , zw2d ) 840 IF( lk_vvl ) CALL wrk_dealloc( jpi , jpj , jpk , zw3d ) 931 841 ! 932 842 IF( nn_timing == 1 ) CALL timing_stop('dia_wri') … … 960 870 !!---------------------------------------------------------------------- 961 871 ! 962 ! IF( nn_timing == 1 ) CALL timing_start('dia_wri_state') ! not sure this works for routines not called in first timestep963 964 872 ! 0. Initialisation 965 873 ! ----------------- … … 1020 928 CALL histdef( id_i, "vovvldep", "T point depth" , "m" , & ! t-point depth 1021 929 & jpi, jpj, nh_i, jpk, 1, jpk, nz_i, 32, clop, zsto, zout ) 1022 END 930 ENDIF 1023 931 1024 932 #if defined key_lim2 … … 1044 952 CALL histwrite( id_i, "vomecrty", kt, vn , jpi*jpj*jpk, idex ) ! now j-velocity 1045 953 CALL histwrite( id_i, "vovecrtz", kt, wn , jpi*jpj*jpk, idex ) ! now k-velocity 1046 CALL histwrite( id_i, "sowaflup", kt, (emp-rnf ), jpi*jpj , idex ) ! freshwater budget954 CALL histwrite( id_i, "sowaflup", kt, emp-rnf , jpi*jpj , idex ) ! freshwater budget 1047 955 CALL histwrite( id_i, "sohefldo", kt, qsr + qns , jpi*jpj , idex ) ! total heat flux 1048 956 CALL histwrite( id_i, "soshfldo", kt, qsr , jpi*jpj , idex ) ! solar heat flux … … 1062 970 ENDIF 1063 971 #endif 1064 1065 ! IF( nn_timing == 1 ) CALL timing_stop('dia_wri_state') ! not sure this works for routines not called in first timestep1066 972 ! 1067 1068 973 END SUBROUTINE dia_wri_state 1069 974 !!======================================================================
Note: See TracChangeset
for help on using the changeset viewer.