Changeset 7218
- Timestamp:
- 2016-11-10T09:51:42+01:00 (7 years ago)
- Location:
- branches/UKMO/v3_6_extra_CMIP6_diagnostics/NEMOGCM
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/v3_6_extra_CMIP6_diagnostics/NEMOGCM/CONFIG/SHARED/field_def.xml
r7209 r7218 98 98 <field id="sshdyn" long_name="dynamic sea surface height" standard_name="dynamic_sea_surface_height_above_geoid" unit="m" /> 99 99 <field id="sshdyn2" long_name="square of dynamic sea surface height" standard_name="dynamic_sea_surface_height_above_geoid_squared" unit="m2" > sshdyn * sshdyn </field> 100 <field id="tnpeo" long_name="Tendency of ocean potential energy content" unit="W/m2" /> 100 101 101 102 <!-- variables available with key_vvl --> … … 405 406 406 407 <!-- uoce_eiv: available with key_traldf_eiv and key_diaeiv --> 407 <field id="uoce_eiv" long_name="EIV ocean current along i-axis" standard_name="bolus_sea_water_x_velocity" unit="m/s" grid_ref="grid_U_3D" /> 408 <field id="uoce_eiv" long_name="EIV ocean current along i-axis" standard_name="bolus_sea_water_x_velocity" unit="m/s" grid_ref="grid_U_3D" /> 409 <field id="ueiv_masstr" long_name="EIV Ocean Mass X Transport" standard_name="bolus_ocean_mass_x_transport" unit="kg/s" grid_ref="grid_U_3D" /> 410 <field id="ueiv_heattr3d" long_name="ocean bolus heat transport along i-axis" standard_name="ocean_heat_x_transport_due_to_bolus_advection" unit="W" grid_ref="grid_U_3D" /> 411 <field id="ueiv_salttr3d" long_name="ocean bolus salt transport along i-axis" standard_name="ocean_salt_x_transport_due_to_bolus_advection" unit="kg" grid_ref="grid_U_3D" /> 408 412 <field id="ueiv_masstr" long_name="EIV Ocean Mass X Transport" standard_name="bolus_ocean_mass_x_transport" unit="kg/s" grid_ref="grid_U_3D" /> 409 413 … … 422 426 <field id="u_salttr" long_name="ocean eulerian salt transport along i-axis" standard_name="ocean_salt_x_transport" unit="0.001*kg/s" /> 423 427 <field id="ueiv_heattr" long_name="ocean bolus heat transport along i-axis" standard_name="ocean_heat_x_transport_due_to_bolus_advection" unit="W" /> 428 <field id="ueiv_salttr" long_name="ocean bolus salt transport along i-axis" standard_name="ocean_salt_x_transport_due_to_bolus_advection" unit="W" /> 424 429 <field id="udiff_heattr" long_name="ocean diffusion heat transport along i-axis" standard_name="ocean_heat_x_transport_due_to_diffusion" unit="W" /> 425 430 </field_group> … … 445 450 <!-- voce_eiv: available with key_traldf_eiv and key_diaeiv --> 446 451 <field id="voce_eiv" long_name="EIV ocean current along j-axis" standard_name="bolus_sea_water_y_velocity" unit="m/s" grid_ref="grid_V_3D" /> 447 <field id="veiv_masstr" long_name="EIV Ocean Mass Y Transport" standard_name="bolus_ocean_mass_y_transport" unit="kg/s" grid_ref="grid_V_3D" /> 452 <field id="veiv_masstr" long_name="EIV Ocean Mass Y Transport" standard_name="bolus_ocean_mass_y_transport" unit="kg/s" grid_ref="grid_V_3D" /> 453 <field id="veiv_heattr3d" long_name="ocean bolus heat transport along j-axis" standard_name="ocean_heat_y_transport_due_to_bolus_advection" unit="W" grid_ref="grid_V_3D" /> 454 <field id="veiv_salttr3d" long_name="ocean bolus salt transport along j-axis" standard_name="ocean_salt_y_transport_due_to_bolus_advection" unit="kg" grid_ref="grid_U_3D" /> 448 455 449 456 <!-- voce_eiv: available with key_trabbl --> … … 460 467 <field id="v_salttr" long_name="ocean eulerian salt transport along i-axis" standard_name="ocean_salt_y_transport" unit="0.001*kg/s" /> 461 468 <field id="veiv_heattr" long_name="ocean bolus heat transport along j-axis" standard_name="ocean_heat_y_transport_due_to_bolus_advection" unit="W" /> 469 <field id="veiv_salttr" long_name="ocean bolus salt transport along j-axis" standard_name="ocean_salt_y_transport_due_to_bolus_advection" unit="W" /> 462 470 <field id="vdiff_heattr" long_name="ocean diffusion heat transport along j-axis" standard_name="ocean_heat_y_transport_due_to_diffusion" unit="W" /> 463 471 </field_group> … … 644 652 645 653 <!-- Poleward transport : ptr --> 646 <field_group id="diaptr" domain_ref="ptr">654 <field_group id="diaptr"> 647 655 <field id="zomsfglo" long_name="Meridional Stream-Function: Global" unit="Sv" grid_ref="gznl_W_3D" /> 648 656 <field id="zomsfatl" long_name="Meridional Stream-Function: Atlantic" unit="Sv" grid_ref="gznl_W_3D" /> … … 735 743 <field_group id="trendT" grid_ref="grid_T_3D"> 736 744 <!-- variables available with ln_tra_trd --> 737 <field id="ttrd_xad" long_name="temperature-trend: i-advection" unit="degree_C/s" /> 738 <field id="strd_xad" long_name="salinity -trend: i-advection" unit="0.001/s" /> 739 <field id="ttrd_yad" long_name="temperature-trend: j-advection" unit="degree_C/s" /> 740 <field id="strd_yad" long_name="salinity -trend: j-advection" unit="0.001/s" /> 741 <field id="ttrd_zad" long_name="temperature-trend: k-advection" unit="degree_C/s" /> 742 <field id="strd_zad" long_name="salinity -trend: k-advection" unit="0.001/s" /> 743 <field id="ttrd_ad" long_name="temperature-trend: advection" standard_name="tendency_of_sea_water_temperature_due_to_advection" unit="degree_C/s" > sqrt( ttrd_xad^2 + ttrd_yad^2 + ttrd_zad^2 ) </field> 744 <field id="strd_ad" long_name="salinity -trend: advection" standard_name="tendency_of_sea_water_salinity_due_to_advection" unit="0.001/s" > sqrt( strd_xad^2 + strd_yad^2 + strd_zad^2 ) </field> 745 <field id="ttrd_sad" long_name="temperature-trend: surface adv. (no-vvl)" unit="degree_C/s" grid_ref="grid_T_2D" /> 746 <field id="strd_sad" long_name="salinity -trend: surface adv. (no-vvl)" unit="0.001/s" grid_ref="grid_T_2D" /> 747 <field id="ttrd_ldf" long_name="temperature-trend: lateral diffusion" standard_name="tendency_of_sea_water_temperature_due_to_horizontal_mixing" unit="degree_C/s" /> 748 <field id="strd_ldf" long_name="salinity -trend: lateral diffusion" standard_name="tendency_of_sea_water_salinity_due_to_horizontal_mixing" unit="0.001/s" /> 749 <field id="ttrd_zdf" long_name="temperature-trend: vertical diffusion" standard_name="tendency_of_sea_water_temperature_due_to_vertical_mixing" unit="degree_C/s" /> 750 <field id="strd_zdf" long_name="salinity -trend: vertical diffusion" standard_name="tendency_of_sea_water_salinity_due_to_vertical_mixing" unit="0.001/s" /> 745 <field id="ttrd_xad" long_name="temperature-trend: i-advection" unit="degC/s" /> 746 <field id="strd_xad" long_name="salinity -trend: i-advection" unit="1e-3/s" /> 747 <field id="ttrd_yad" long_name="temperature-trend: j-advection" unit="degC/s" /> 748 <field id="strd_yad" long_name="salinity -trend: j-advection" unit="1e-3/s" /> 749 <field id="ttrd_zad" long_name="temperature-trend: k-advection" unit="degC/s" /> 750 <field id="strd_zad" long_name="salinity -trend: k-advection" unit="1e-3/s" /> 751 <field id="ttrd_ad" long_name="temperature-trend: advection" standard_name="tendency_of_sea_water_temperature_due_to_advection" unit="degC/s" > sqrt( ttrd_xad^2 + ttrd_yad^2 + ttrd_zad^2 ) </field> 752 <field id="strd_ad" long_name="salinity -trend: advection" standard_name="tendency_of_sea_water_salinity_due_to_advection" unit="1e-3/s" > sqrt( strd_xad^2 + strd_yad^2 + strd_zad^2 ) </field> 753 <field id="ttrd_totad" long_name="temperature-trend: total advection" standard_name="tendency_of_sea_water_salinity_due_to_advection" unit="degC/s" /> 754 <field id="strd_totad" long_name="salinity -trend: total advection" standard_name="tendency_of_sea_water_salinity_due_to_advection" unit="1e-3/s" /> 755 <field id="ttrd_sad" long_name="temperature-trend: surface adv. (no-vvl)" unit="degC/s" grid_ref="grid_T_2D" /> 756 <field id="strd_sad" long_name="salinity -trend: surface adv. (no-vvl)" unit="1e-3/s" grid_ref="grid_T_2D" /> 757 <field id="ttrd_ldf" long_name="temperature-trend: lateral diffusion" standard_name="tendency_of_sea_water_temperature_due_to_horizontal_mixing" unit="degC/s" /> 758 <field id="strd_ldf" long_name="salinity -trend: lateral diffusion" standard_name="tendency_of_sea_water_salinity_due_to_horizontal_mixing" unit="1e-3/s" /> 759 <field id="ttrd_zdf" long_name="temperature-trend: vertical diffusion" standard_name="tendency_of_sea_water_temperature_due_to_vertical_mixing" unit="degC/s" /> 760 <field id="strd_zdf" long_name="salinity -trend: vertical diffusion" standard_name="tendency_of_sea_water_salinity_due_to_vertical_mixing" unit="1e-3/s" /> 761 <field id="ttrd_evd" long_name="temperature-trend: EVD convection" unit="degC/s" /> 762 <field id="strd_evd" long_name="salinity -trend: EVD convection" unit="1e-3/s" /> 751 763 752 764 <!-- ln_traldf_iso=T only (iso-neutral diffusion) --> 753 <field id="ttrd_zdfp" long_name="temperature-trend: pure vert. diffusion" unit="degree_C/s" /> 754 <field id="strd_zdfp" long_name="salinity -trend: pure vert. diffusion" unit="0.001/s" /> 765 <field id="ttrd_iso_x" long_name="temperature-trend: isopycnal diffusion x-component" unit="degC/s" /> 766 <field id="strd_iso_x" long_name="salinity -trend: isopycnal diffusion x-component" unit="1e-3/s" /> 767 <field id="ttrd_iso_y" long_name="temperature-trend: isopycnal diffusion y-component" unit="degC/s" /> 768 <field id="strd_iso_y" long_name="salinity -trend: isopycnal diffusion y-component" unit="1e-3/s" /> 769 <field id="ttrd_iso_z1" long_name="temperature-trend: isopycnal diffusion z-component part 1" unit="degC/s" /> 770 <field id="strd_iso_z1" long_name="salinity -trend: isopycnal diffusion z-component part 1" unit="1e-3/s" /> 771 <field id="ttrd_iso_z" long_name="temperature-trend: isopycnal diffusion z-component" unit="degC/s" > ttrd_iso_z1 + ttrd_zdf - ttrd_zdfp </field> 772 <field id="strd_iso_z" long_name="salinity -trend: isopycnal diffusion z-component" unit="1e-3/s" > strd_iso_z1 + strd_zdf - strd_zdfp </field> 773 <field id="ttrd_iso" long_name="temperature-trend: isopycnal diffusion" unit="degC/s" > ttrd_ldf + ttrd_zdf - ttrd_zdfp </field> 774 <field id="strd_iso" long_name="salinity -trend: isopycnal diffusion" unit="1e-3/s" > strd_ldf + strd_zdf - strd_zdfp </field> 775 <field id="ttrd_zdfp" long_name="temperature-trend: pure vert. diffusion" unit="degC/s" /> 776 <field id="strd_zdfp" long_name="salinity -trend: pure vert. diffusion" unit="1e-3/s" /> 755 777 756 778 <!-- --> … … 761 783 <field id="ttrd_npc" long_name="temperature-trend: non-penetrative conv." unit="degree_C/s" /> 762 784 <field id="strd_npc" long_name="salinity -trend: non-penetrative conv." unit="0.001/s" /> 763 <field id="ttrd_qns" long_name="temperature-trend: non-solar flux + runoff" unit="deg ree_C/s"/>764 <field id="strd_cdt" long_name="salinity -trend: C/D term + runoff" unit="deg ree_C/s"/>785 <field id="ttrd_qns" long_name="temperature-trend: non-solar flux + runoff" unit="degC/s" grid_ref="grid_T_2D"/> 786 <field id="strd_cdt" long_name="salinity -trend: C/D term + runoff" unit="degC/s" grid_ref="grid_T_2D"/> 765 787 <field id="ttrd_qsr" long_name="temperature-trend: solar penetr. heating" unit="degree_C/s" /> 766 788 <field id="ttrd_bbc" long_name="temperature-trend: geothermal heating" unit="degree_C/s" /> 767 789 <field id="ttrd_atf" long_name="temperature-trend: asselin time filter" unit="degree_C/s" /> 768 790 <field id="strd_atf" long_name="salinity -trend: asselin time filter" unit="0.001/s" /> 791 <field id="ttrd_tot" long_name="temperature-trend: total model trend" unit="degC/s" /> 792 <field id="strd_tot" long_name="salinity -trend: total model trend" unit="1e-3/s" /> 793 794 <!-- Thickness weighted versions: --> 795 <field id="ttrd_xad_e3t" unit="degC/s * m" > ttrd_xad * e3t </field> 796 <field id="strd_xad_e3t" unit="1e-3/s * m" > strd_xad * e3t </field> 797 <field id="ttrd_yad_e3t" unit="degC/s * m" > ttrd_yad * e3t </field> 798 <field id="strd_yad_e3t" unit="1e-3/s * m" > strd_yad * e3t </field> 799 <field id="ttrd_zad_e3t" unit="degC/s * m" > ttrd_zad * e3t </field> 800 <field id="strd_zad_e3t" unit="1e-3/s * m" > strd_zad * e3t </field> 801 <field id="ttrd_ad_e3t" unit="degC/s * m" > ttrd_ad * e3t </field> 802 <field id="strd_ad_e3t" unit="1e-3/s * m" > strd_ad * e3t </field> 803 <field id="ttrd_totad_e3t" unit="degC/s * m" > ttrd_totad * e3t </field> 804 <field id="strd_totad_e3t" unit="1e-3/s * m" > strd_totad * e3t </field> 805 <field id="ttrd_ldf_e3t" unit="degC/s * m" > ttrd_ldf * e3t </field> 806 <field id="strd_ldf_e3t" unit="1e-3/s * m" > strd_ldf * e3t </field> 807 <field id="ttrd_zdf_e3t" unit="degC/s * m" > ttrd_zdf * e3t </field> 808 <field id="strd_zdf_e3t" unit="1e-3/s * m" > strd_zdf * e3t </field> 809 <field id="ttrd_evd_e3t" unit="degC/s * m" > ttrd_evd * e3t </field> 810 <field id="strd_evd_e3t" unit="1e-3/s * m" > strd_evd * e3t </field> 811 812 <!-- ln_traldf_iso=T only (iso-neutral diffusion) --> 813 <field id="ttrd_iso_x_e3t" unit="degC/s * m" > ttrd_iso_x * e3t </field> 814 <field id="strd_iso_x_e3t" unit="1e-3/s * m" > strd_iso_x * e3t </field> 815 <field id="ttrd_iso_y_e3t" unit="degC/s * m" > ttrd_iso_y * e3t </field> 816 <field id="strd_iso_y_e3t" unit="1e-3/s * m" > strd_iso_y * e3t </field> 817 <field id="ttrd_iso_z_e3t" unit="degC/s * m" > ttrd_iso_z * e3t </field> 818 <field id="strd_iso_z_e3t" unit="1e-3/s * m" > strd_iso_z * e3t </field> 819 <field id="ttrd_iso_e3t" unit="degC/s * m" > ttrd_iso * e3t </field> 820 <field id="strd_iso_e3t" unit="1e-3/s * m" > strd_iso * e3t </field> 821 <field id="ttrd_zdfp_e3t" unit="degC/s * m" > ttrd_zdfp * e3t </field> 822 <field id="strd_zdfp_e3t" unit="1e-3/s * m" > strd_zdfp * e3t </field> 823 824 <!-- --> 825 <field id="ttrd_dmp_e3t" unit="degC/s * m" > ttrd_dmp * e3t </field> 826 <field id="strd_dmp_e3t" unit="1e-3/s * m" > strd_dmp * e3t </field> 827 <field id="ttrd_bbl_e3t" unit="degC/s * m" > ttrd_bbl * e3t </field> 828 <field id="strd_bbl_e3t" unit="1e-3/s * m" > strd_bbl * e3t </field> 829 <field id="ttrd_npc_e3t" unit="degC/s * m" > ttrd_npc * e3t </field> 830 <field id="strd_npc_e3t" unit="1e-3/s * m" > strd_npc * e3t </field> 831 <field id="ttrd_qns_e3t" unit="degC/s * m" > ttrd_qns * e3t_surf </field> 832 <field id="strd_cdt_e3t" unit="degC/s * m" > strd_cdt * e3t_surf </field> 833 <field id="ttrd_qsr_e3t" unit="degC/s * m" > ttrd_qsr * e3t </field> 834 <field id="ttrd_bbc_e3t" unit="degC/s * m" > ttrd_bbc * e3t </field> 835 <field id="ttrd_atf_e3t" unit="degC/s * m" > ttrd_atf * e3t </field> 836 <field id="strd_atf_e3t" unit="1e-3/s * m" > strd_atf * e3t </field> 837 <field id="ttrd_tot_e3t" unit="degC/s * m" > ttrd_tot * e3t </field> 838 <field id="strd_tot_e3t" unit="1e-3/s * m" > strd_tot * e3t </field> 769 839 770 840 <!-- variables available with ln_KE_trd --> … … 782 852 <field id="ketrd_zad" long_name="ke-trend: vertical advection" unit="W/s^3" /> 783 853 <field id="ketrd_udx" long_name="ke-trend: U.dx[U]" unit="W/s^3" /> 784 <field id="ketrd_ldf" long_name="ke-trend: lateral diffusion" unit="W/s^3" /> 854 <field id="ketrd_ldf" long_name="ke-trend: lateral diffusion" unit="W/m^3" /> 855 <field id="ketrd_ldf_e3t" field_ref="ketrd_ldf" long_name="ke-trend: lateral diffusion * e3t" unit="W/m^2" >ketrd_ldf*e3t</field> 856 <field id="ketrd_ldf_vsum" field_ref="ketrd_ldf_e3t" long_name="ke-trend: lateral diffusion vertical integral" unit="W/m^2" grid_ref="vert_sum" /> 785 857 <field id="ketrd_zdf" long_name="ke-trend: vertical diffusion" unit="W/s^3" /> 786 858 <field id="ketrd_tau" long_name="ke-trend: wind stress " unit="W/s^3" grid_ref="grid_T_2D" /> … … 1023 1095 <field id="INTPBSI" long_name="Vertically integrated of biogenic Si production" unit="mol/m2/s" /> 1024 1096 <field id="INTPCAL" long_name="Vertically integrated of calcite production" unit="mol/m2/s" /> 1025 <field id="pe_trd" long_name="Tendency of ocean potential energy content" unit="W/m2" />1026 1097 1027 1098 <!-- PISCES light : variables available with key_pisces_reduced --> -
branches/UKMO/v3_6_extra_CMIP6_diagnostics/NEMOGCM/NEMO/OPA_SRC/TRA/traadv.F90
r6427 r7218 26 26 USE cla ! cross land advection (cla_traadv routine) 27 27 USE ldftra_oce ! lateral diffusion coefficient on tracers 28 USE trd_oce ! trends: ocean variables 29 USE trdtra ! trends manager: tracers 28 30 ! 29 31 USE in_out_manager ! I/O manager … … 79 81 INTEGER :: jk ! dummy loop index 80 82 REAL(wp), POINTER, DIMENSION(:,:,:) :: zun, zvn, zwn 83 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrdt, ztrds ! 3D workspace 81 84 !!---------------------------------------------------------------------- 82 85 ! … … 120 123 IF( ln_diaptr ) CALL dia_ptr( zvn ) ! diagnose the effective MSF 121 124 ! 122 125 IF( l_trdtra ) THEN !* Save ta and sa trends 126 CALL wrk_alloc( jpi, jpj, jpk, ztrdt, ztrds ) 127 ztrdt(:,:,:) = tsa(:,:,:,jp_tem) 128 ztrds(:,:,:) = tsa(:,:,:,jp_sal) 129 ENDIF 130 ! 123 131 SELECT CASE ( nadv ) !== compute advection trend and add it to general trend ==! 124 132 CASE ( 1 ) ; CALL tra_adv_cen2 ( kt, nit000, 'TRA', zun, zvn, zwn, tsb, tsn, tsa, jpts ) ! 2nd order centered … … 151 159 END SELECT 152 160 ! 161 IF( l_trdtra ) THEN ! save the advective trends for further diagnostics 162 DO jk = 1, jpkm1 163 ztrdt(:,:,jk) = tsa(:,:,jk,jp_tem) - ztrdt(:,:,jk) 164 ztrds(:,:,jk) = tsa(:,:,jk,jp_sal) - ztrds(:,:,jk) 165 END DO 166 CALL trd_tra( kt, 'TRA', jp_tem, jptra_totad, ztrdt ) 167 CALL trd_tra( kt, 'TRA', jp_sal, jptra_totad, ztrds ) 168 CALL wrk_dealloc( jpi, jpj, jpk, ztrdt, ztrds ) 169 ENDIF 153 170 ! ! print mean trends (used for debugging) 154 171 IF(ln_ctl) CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' adv - Ta: ', mask1=tmask, & -
branches/UKMO/v3_6_extra_CMIP6_diagnostics/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_eiv.F90
r7063 r7218 81 81 # endif 82 82 REAL(wp), POINTER, DIMENSION(:,:) :: zu_eiv, zv_eiv, zw_eiv, z2d 83 REAL(wp), POINTER, DIMENSION(:,:,:) :: z3d 83 REAL(wp), POINTER, DIMENSION(:,:,:) :: z3d, z3d_T 84 84 !!---------------------------------------------------------------------- 85 85 ! … … 88 88 # if defined key_diaeiv 89 89 CALL wrk_alloc( jpi, jpj, zu_eiv, zv_eiv, zw_eiv, z2d ) 90 IF( ln_diaptr ) CALL wrk_alloc( jpi, jpj, jpk, z3d)90 CALL wrk_alloc( jpi, jpj, jpk, z3d, z3d_T ) 91 91 # else 92 92 CALL wrk_alloc( jpi, jpj, zu_eiv, zv_eiv, zw_eiv ) … … 172 172 CALL iom_put( "weiv_masstr" , z3d ) 173 173 ENDIF 174 IF( iom_use("ueiv_masstr") .OR. iom_use("ueiv_heattr") ) THEN 174 IF( iom_use("ueiv_masstr") .OR. iom_use("ueiv_heattr") .OR. iom_use('ueiv_heattr3d') & 175 .OR. iom_use("ueiv_salttr") .OR. iom_use('ueiv_salttr3d') ) THEN 175 176 z3d(:,:,jpk) = 0.e0 176 177 z2d(:,:) = 0.e0 … … 182 183 ENDIF 183 184 184 IF( iom_use('ueiv_heattr') ) THEN185 IF( iom_use('ueiv_heattr') .OR. iom_use('ueiv_heattr3d') ) THEN 185 186 zztmp = 0.5 * rcp 186 187 z2d(:,:) = 0.e0 187 DO jk = 1, jpkm1 188 DO jj = 2, jpjm1 189 DO ji = fs_2, fs_jpim1 ! vector opt. 190 z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_tem) + tsn(ji+1,jj,jk,jp_tem) ) 191 END DO 192 END DO 193 END DO 194 CALL lbc_lnk( z2d, 'U', -1. ) 195 CALL iom_put( "ueiv_heattr", zztmp * z2d ) ! heat transport in i-direction 196 ENDIF 197 198 IF( iom_use("veiv_masstr") .OR. iom_use("veiv_heattr") ) THEN 188 z3d_T(:,:,:) = 0.e0 189 DO jk = 1, jpkm1 190 DO jj = 2, jpjm1 191 DO ji = fs_2, fs_jpim1 ! vector opt. 192 z3d_T(ji,jj,jk) = z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_tem) + tsn(ji+1,jj,jk,jp_tem) ) 193 z2d(ji,jj) = z2d(ji,jj) + z3d_T(ji,jj,jk) 194 END DO 195 END DO 196 END DO 197 IF (iom_use('ueiv_heattr') ) THEN 198 CALL lbc_lnk( z2d, 'U', -1. ) 199 CALL iom_put( "ueiv_heattr", zztmp * z2d ) ! 2D heat transport in i-direction 200 ENDIF 201 IF (iom_use('ueiv_heattr3d') ) THEN 202 CALL lbc_lnk( z3d_T, 'U', -1. ) 203 CALL iom_put( "ueiv_heattr3d", zztmp * z3d_T ) ! 3D heat transport in i-direction 204 ENDIF 205 ENDIF 206 207 IF( iom_use('ueiv_salttr') .OR. iom_use('ueiv_salttr3d') ) THEN 208 zztmp = 0.5 * 0.001 209 z2d(:,:) = 0.e0 210 z3d_T(:,:,:) = 0.e0 211 DO jk = 1, jpkm1 212 DO jj = 2, jpjm1 213 DO ji = fs_2, fs_jpim1 ! vector opt. 214 z3d_T(ji,jj,jk) = z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_sal) + tsn(ji+1,jj,jk,jp_sal) ) 215 z2d(ji,jj) = z2d(ji,jj) + z3d_T(ji,jj,jk) 216 END DO 217 END DO 218 END DO 219 IF (iom_use('ueiv_salttr') ) THEN 220 CALL lbc_lnk( z2d, 'U', -1. ) 221 CALL iom_put( "ueiv_salttr", zztmp * z2d ) ! 2D salt transport in i-direction 222 ENDIF 223 IF (iom_use('ueiv_salttr3d') ) THEN 224 CALL lbc_lnk( z3d_T, 'U', -1. ) 225 CALL iom_put( "ueiv_salttr3d", zztmp * z3d_T ) ! 3D salt transport in i-direction 226 ENDIF 227 ENDIF 228 229 IF( iom_use("veiv_masstr") .OR. iom_use("veiv_heattr") .OR. iom_use('veiv_heattr3d') & 230 .OR. iom_use("veiv_salttr") .OR. iom_use('veiv_salttr3d') ) THEN 199 231 z3d(:,:,jpk) = 0.e0 200 z2d(:,:) = 0.e0201 232 DO jk = 1, jpkm1 202 233 z3d(:,:,jk) = rau0 * v_eiv(:,:,jk) * e1v(:,:) * fse3v(:,:,jk) * vmask(:,:,jk) … … 205 236 ENDIF 206 237 207 IF( iom_use('veiv_heattr') ) THEN238 IF( iom_use('veiv_heattr') .OR. iom_use('veiv_heattr3d') ) THEN 208 239 zztmp = 0.5 * rcp 209 240 z2d(:,:) = 0.e0 210 DO jk = 1, jpkm1 211 DO jj = 2, jpjm1 212 DO ji = fs_2, fs_jpim1 ! vector opt. 213 z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_tem) + tsn(ji,jj+1,jk,jp_tem) ) 214 END DO 215 END DO 216 END DO 217 CALL lbc_lnk( z2d, 'V', -1. ) 218 CALL iom_put( "veiv_heattr", zztmp * z2d ) ! heat transport in j-direction 219 ENDIF 241 z3d_T(:,:,:) = 0.e0 242 DO jk = 1, jpkm1 243 DO jj = 2, jpjm1 244 DO ji = fs_2, fs_jpim1 ! vector opt. 245 z3d_T(ji,jj,jk) = z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_tem) + tsn(ji,jj+1,jk,jp_tem) ) 246 z2d(ji,jj) = z2d(ji,jj) + z3d_T(ji,jj,jk) 247 END DO 248 END DO 249 END DO 250 IF (iom_use('veiv_heattr') ) THEN 251 CALL lbc_lnk( z2d, 'V', -1. ) 252 CALL iom_put( "veiv_heattr", zztmp * z2d ) ! 2D heat transport in j-direction 253 ENDIF 254 IF (iom_use('veiv_heattr3d') ) THEN 255 CALL lbc_lnk( z3d_T, 'V', -1. ) 256 CALL iom_put( "veiv_heattr3d", zztmp * z3d_T ) ! 3D heat transport in j-direction 257 ENDIF 258 ENDIF 259 260 IF( iom_use('veiv_salttr') .OR. iom_use('veiv_salttr3d') ) THEN 261 zztmp = 0.5 * 0.001 262 z2d(:,:) = 0.e0 263 z3d_T(:,:,:) = 0.e0 264 DO jk = 1, jpkm1 265 DO jj = 2, jpjm1 266 DO ji = fs_2, fs_jpim1 ! vector opt. 267 z3d_T(ji,jj,jk) = z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_sal) + tsn(ji,jj+1,jk,jp_sal) ) 268 z2d(ji,jj) = z2d(ji,jj) + z3d_T(ji,jj,jk) 269 END DO 270 END DO 271 END DO 272 IF (iom_use('veiv_salttr') ) THEN 273 CALL lbc_lnk( z2d, 'V', -1. ) 274 CALL iom_put( "veiv_salttr", zztmp * z2d ) ! 2D salt transport in i-direction 275 ENDIF 276 IF (iom_use('veiv_salttr3d') ) THEN 277 CALL lbc_lnk( z3d_T, 'V', -1. ) 278 CALL iom_put( "veiv_salttr3d", zztmp * z3d_T ) ! 3D salt transport in i-direction 279 ENDIF 280 ENDIF 281 282 IF( iom_use('weiv_masstr') .OR. iom_use('weiv_heattr3d') .OR. iom_use('weiv_salttr3d')) THEN ! vertical mass transport & its square value 283 z2d(:,:) = rau0 * e12t(:,:) 284 DO jk = 1, jpk 285 z3d(:,:,jk) = w_eiv(:,:,jk) * z2d(:,:) 286 END DO 287 CALL iom_put( "weiv_masstr" , z3d ) ! mass transport in k-direction 288 ENDIF 289 290 IF( iom_use('weiv_heattr3d') ) THEN 291 zztmp = 0.5 * rcp 292 DO jk = 1, jpkm1 293 DO jj = 2, jpjm1 294 DO ji = fs_2, fs_jpim1 ! vector opt. 295 z3d_T(ji,jj,jk) = z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_tem) + tsn(ji,jj,jk+1,jp_tem) ) 296 END DO 297 END DO 298 END DO 299 CALL lbc_lnk( z3d_T, 'T', 1. ) 300 CALL iom_put( "weiv_heattr3d", zztmp * z3d_T ) ! 3D heat transport in k-direction 301 ENDIF 302 303 IF( iom_use('weiv_salttr3d') ) THEN 304 zztmp = 0.5 * 0.001 305 DO jk = 1, jpkm1 306 DO jj = 2, jpjm1 307 DO ji = fs_2, fs_jpim1 ! vector opt. 308 z3d_T(ji,jj,jk) = z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_sal) + tsn(ji,jj,jk+1,jp_sal) ) 309 END DO 310 END DO 311 END DO 312 CALL lbc_lnk( z3d_T, 'T', 1. ) 313 CALL iom_put( "weiv_salttr3d", zztmp * z3d_T ) ! 3D salt transport in k-direction 314 ENDIF 315 220 316 END IF 221 317 ! … … 248 344 # if defined key_diaeiv 249 345 CALL wrk_dealloc( jpi, jpj, zu_eiv, zv_eiv, zw_eiv, z2d ) 250 IF( ln_diaptr ) CALL wrk_dealloc( jpi, jpj, jpk, z3d)346 CALL wrk_dealloc( jpi, jpj, jpk, z3d, z3d_T ) 251 347 # else 252 348 CALL wrk_dealloc( jpi, jpj, zu_eiv, zv_eiv, zw_eiv ) -
branches/UKMO/v3_6_extra_CMIP6_diagnostics/NEMOGCM/NEMO/OPA_SRC/TRD/trd_oce.F90
r7040 r7218 39 39 INTEGER, PUBLIC, PARAMETER :: jptra_zad = 3 !: z- vertical advection 40 40 INTEGER, PUBLIC, PARAMETER :: jptra_sad = 4 !: z- vertical advection 41 INTEGER, PUBLIC, PARAMETER :: jptra_ldf = 5 !: lateral diffusion 42 INTEGER, PUBLIC, PARAMETER :: jptra_zdf = 6 !: vertical diffusion 43 INTEGER, PUBLIC, PARAMETER :: jptra_zdfp = 7 !: "PURE" vert. diffusion (ln_traldf_iso=T) 44 INTEGER, PUBLIC, PARAMETER :: jptra_bbc = 8 !: Bottom Boundary Condition (geoth. heating) 45 INTEGER, PUBLIC, PARAMETER :: jptra_bbl = 9 !: Bottom Boundary Layer (diffusive and/or advective) 46 INTEGER, PUBLIC, PARAMETER :: jptra_npc = 10 !: non-penetrative convection treatment 47 INTEGER, PUBLIC, PARAMETER :: jptra_dmp = 11 !: internal restoring (damping) 48 INTEGER, PUBLIC, PARAMETER :: jptra_qsr = 12 !: penetrative solar radiation 49 INTEGER, PUBLIC, PARAMETER :: jptra_nsr = 13 !: non solar radiation / C/D on salinity (+runoff if ln_rnf=T) 50 INTEGER, PUBLIC, PARAMETER :: jptra_atf = 14 !: Asselin time filter 41 INTEGER, PUBLIC, PARAMETER :: jptra_totad = 5 !: total advection 42 INTEGER, PUBLIC, PARAMETER :: jptra_ldf = 6 !: lateral diffusion 43 INTEGER, PUBLIC, PARAMETER :: jptra_zdf = 7 !: vertical diffusion 44 INTEGER, PUBLIC, PARAMETER :: jptra_zdfp = 8 !: "PURE" vert. diffusion (ln_traldf_iso=T) 45 INTEGER, PUBLIC, PARAMETER :: jptra_evd = 9 !: EVD term (convection) 46 INTEGER, PUBLIC, PARAMETER :: jptra_bbc = 10 !: Bottom Boundary Condition (geoth. heating) 47 INTEGER, PUBLIC, PARAMETER :: jptra_bbl = 11 !: Bottom Boundary Layer (diffusive and/or advective) 48 INTEGER, PUBLIC, PARAMETER :: jptra_npc = 12 !: non-penetrative convection treatment 49 INTEGER, PUBLIC, PARAMETER :: jptra_dmp = 13 !: internal restoring (damping) 50 INTEGER, PUBLIC, PARAMETER :: jptra_qsr = 14 !: penetrative solar radiation 51 INTEGER, PUBLIC, PARAMETER :: jptra_nsr = 15 !: non solar radiation / C/D on salinity (+runoff if ln_rnf=T) 52 INTEGER, PUBLIC, PARAMETER :: jptra_atf = 16 !: Asselin time filter 53 INTEGER, PUBLIC, PARAMETER :: jptra_tot = 17 !: Model total trend 51 54 ! 52 55 ! !!!* Passive tracers trends indices (use if "key_top" defined) 53 INTEGER, PUBLIC, PARAMETER :: jptra_sms = 1 5!: sources m. sinks54 INTEGER, PUBLIC, PARAMETER :: jptra_radn = 1 6!: corr. trn<0 in trcrad55 INTEGER, PUBLIC, PARAMETER :: jptra_radb = 17!: corr. trb<0 in trcrad (like atf)56 INTEGER, PUBLIC, PARAMETER :: jptra_sms = 18 !: sources m. sinks 57 INTEGER, PUBLIC, PARAMETER :: jptra_radn = 19 !: corr. trn<0 in trcrad 58 INTEGER, PUBLIC, PARAMETER :: jptra_radb = 20 !: corr. trb<0 in trcrad (like atf) 56 59 ! 57 60 ! !!!* Momentum trends indices -
branches/UKMO/v3_6_extra_CMIP6_diagnostics/NEMOGCM/NEMO/OPA_SRC/TRD/trdtra.F90
r6427 r7218 38 38 REAL(wp) :: r2dt ! time-step, = 2 rdttra except at nit000 (=rdttra) if neuler=0 39 39 40 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: trdtx, trdty, trdt ! use to store the temperature trends 40 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: trdtx, trdty, trdt ! use to store the temperature trends 41 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: avt_evd ! store avt_evd to calculate EVD trend 41 42 42 43 !! * Substitutions … … 55 56 !! *** FUNCTION trd_tra_alloc *** 56 57 !!--------------------------------------------------------------------- 57 ALLOCATE( trdtx(jpi,jpj,jpk) , trdty(jpi,jpj,jpk) , trdt(jpi,jpj,jpk) , STAT= trd_tra_alloc )58 ALLOCATE( trdtx(jpi,jpj,jpk) , trdty(jpi,jpj,jpk) , trdt(jpi,jpj,jpk) , avt_evd(jpi,jpj,jpk), STAT= trd_tra_alloc ) 58 59 ! 59 60 IF( lk_mpp ) CALL mpp_sum ( trd_tra_alloc ) … … 104 105 ztrds(:,:,:) = 0._wp 105 106 CALL trd_tra_mng( trdt, ztrds, ktrd, kt ) 107 CASE( jptra_evd ) ; avt_evd(:,:,:) = ptrd(:,:,:) * tmask(:,:,:) 106 108 CASE DEFAULT ! other trends: masked trends 107 109 trdt(:,:,:) = ptrd(:,:,:) * tmask(:,:,:) ! mask & store … … 128 130 zwt(:,:,jpk) = 0._wp ; zws(:,:,jpk) = 0._wp 129 131 DO jk = 2, jpk 130 zwt(:,:,jk) = avt(:,:,jk) * ( tsa(:,:,jk-1,jp_tem) - tsa(:,:,jk,jp_tem) ) / fse3w(:,:,jk) * tmask(:,:,jk)132 zwt(:,:,jk) = avt_k(:,:,jk) * ( tsa(:,:,jk-1,jp_tem) - tsa(:,:,jk,jp_tem) ) / fse3w(:,:,jk) * tmask(:,:,jk) 131 133 zws(:,:,jk) = fsavs(:,:,jk) * ( tsa(:,:,jk-1,jp_sal) - tsa(:,:,jk,jp_sal) ) / fse3w(:,:,jk) * tmask(:,:,jk) 132 134 END DO … … 138 140 END DO 139 141 CALL trd_tra_mng( ztrdt, ztrds, jptra_zdfp, kt ) 142 ! 143 ! ! Also calculate EVD trend at this point. 144 zwt(:,:,:) = 0._wp ; zws(:,:,:) = 0._wp ! vertical diffusive fluxes 145 DO jk = 2, jpk 146 zwt(:,:,jk) = avt_evd(:,:,jk) * ( tsa(:,:,jk-1,jp_tem) - tsa(:,:,jk,jp_tem) ) / fse3w(:,:,jk) * tmask(:,:,jk) 147 zws(:,:,jk) = avt_evd(:,:,jk) * ( tsa(:,:,jk-1,jp_sal) - tsa(:,:,jk,jp_sal) ) / fse3w(:,:,jk) * tmask(:,:,jk) 148 END DO 149 ! 150 ztrdt(:,:,jpk) = 0._wp ; ztrds(:,:,jpk) = 0._wp 151 DO jk = 1, jpkm1 152 ztrdt(:,:,jk) = ( zwt(:,:,jk) - zwt(:,:,jk+1) ) / fse3t(:,:,jk) 153 ztrds(:,:,jk) = ( zws(:,:,jk) - zws(:,:,jk+1) ) / fse3t(:,:,jk) 154 END DO 155 CALL trd_tra_mng( ztrdt, ztrds, jptra_evd, kt ) 140 156 ! 141 157 CALL wrk_dealloc( jpi, jpj, jpk, zwt, zws, ztrdt ) … … 312 328 CALL wrk_dealloc( jpi, jpj, z2dx, z2dy ) 313 329 ENDIF 330 CASE( jptra_totad ) ; CALL iom_put( "ttrd_totad" , ptrdx ) ! total advection 331 CALL iom_put( "strd_totad" , ptrdy ) 314 332 CASE( jptra_ldf ) ; CALL iom_put( "ttrd_ldf" , ptrdx ) ! lateral diffusion 315 333 CALL iom_put( "strd_ldf" , ptrdy ) … … 318 336 CASE( jptra_zdfp ) ; CALL iom_put( "ttrd_zdfp", ptrdx ) ! PURE vertical diffusion (no isoneutral contribution) 319 337 CALL iom_put( "strd_zdfp", ptrdy ) 338 CASE( jptra_evd ) ; CALL iom_put( "ttrd_evd", ptrdx ) ! EVD trend (convection) 339 CALL iom_put( "strd_evd", ptrdy ) 320 340 CASE( jptra_dmp ) ; CALL iom_put( "ttrd_dmp" , ptrdx ) ! internal restoring (damping) 321 341 CALL iom_put( "strd_dmp" , ptrdy ) … … 324 344 CASE( jptra_npc ) ; CALL iom_put( "ttrd_npc" , ptrdx ) ! static instability mixing 325 345 CALL iom_put( "strd_npc" , ptrdy ) 326 CASE( jptra_nsr ) ; CALL iom_put( "ttrd_qns" , ptrdx ) ! surface forcing + runoff (ln_rnf=T)327 CALL iom_put( "strd_cdt" , ptrdy )346 CASE( jptra_nsr ) ; CALL iom_put( "ttrd_qns" , ptrdx(:,:,1) ) ! surface forcing + runoff (ln_rnf=T) 347 CALL iom_put( "strd_cdt" , ptrdy(:,:,1) ) ! output as 2D surface fields 328 348 CASE( jptra_qsr ) ; CALL iom_put( "ttrd_qsr" , ptrdx ) ! penetrative solar radiat. (only on temperature) 329 349 CASE( jptra_bbc ) ; CALL iom_put( "ttrd_bbc" , ptrdx ) ! geothermal heating (only on temperature) 330 350 CASE( jptra_atf ) ; CALL iom_put( "ttrd_atf" , ptrdx ) ! asselin time Filter 331 351 CALL iom_put( "strd_atf" , ptrdy ) 352 CASE( jptra_tot ) ; CALL iom_put( "ttrd_tot" , ptrdx ) ! model total trend 353 CALL iom_put( "strd_tot" , ptrdy ) 332 354 END SELECT 333 355 ! -
branches/UKMO/v3_6_extra_CMIP6_diagnostics/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfevd.F90
r6427 r7218 19 19 USE zdf_oce ! ocean vertical physics variables 20 20 USE zdfkpp ! KPP vertical mixing 21 USE trd_oce ! trends: ocean variables 22 USE trdtra ! trends manager: tracers 21 23 USE in_out_manager ! I/O manager 22 24 USE iom ! for iom_put … … 122 124 zavt_evd(:,:,:) = avt(:,:,:) - zavt_evd(:,:,:) ! change in avt due to evd 123 125 CALL iom_put( "avt_evd", zavt_evd ) ! output this change 126 IF( l_trdtra ) CALL trd_tra( kt, 'TRA', jp_tem, jptra_evd, zavt_evd ) 124 127 ! 125 128 IF( nn_timing == 1 ) CALL timing_stop('zdf_evd')
Note: See TracChangeset
for help on using the changeset viewer.