Changeset 5385
- Timestamp:
- 2015-06-09T15:50:42+02:00 (10 years ago)
- Location:
- trunk/NEMOGCM
- Files:
-
- 83 edited
- 5 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/ARCH/arch-X64_ADA.fcm
r4990 r5385 32 32 %HDF5_HOME /smplocal/pub/HDF5/1.8.9/par 33 33 %XIOS_HOME $WORKDIR/XIOS 34 %OASIS_HOME /not/yet/defined 34 ####%OASIS_HOME $WORKDIR/oasis3-mct/BLD 35 %OASIS_HOME /not/defined 35 36 36 37 %NCDF_INC -I%NCDF_HOME/include -
trunk/NEMOGCM/CONFIG/AMM12/EXP00/iodef.xml
r5363 r5385 130 130 <grid id="grid_W_2D" domain_ref="grid_W"/> 131 131 <grid id="grid_W_3D" domain_ref="grid_W" axis_ref="depthw"/> 132 <grid id="gznl_T_2D" domain_ref="gznl"/> 133 <grid id="gznl_T_3D" domain_ref="gznl" axis_ref="deptht"/> 134 <grid id="gznl_W_3D" domain_ref="gznl" axis_ref="depthw"/> 132 135 </grid_definition> 133 136 </context> -
trunk/NEMOGCM/CONFIG/ORCA2_LIM/EXP00/iodef.xml
r5363 r5385 147 147 <grid id="grid_W_2D" domain_ref="grid_W"/> 148 148 <grid id="grid_W_3D" domain_ref="grid_W" axis_ref="depthw"/> 149 <grid id="gznl_T_2D" domain_ref="gznl"/> 150 <grid id="gznl_T_3D" domain_ref="gznl" axis_ref="deptht"/> 151 <grid id="gznl_W_3D" domain_ref="gznl" axis_ref="depthw"/> 149 152 </grid_definition> 150 153 </context> -
trunk/NEMOGCM/CONFIG/ORCA2_LIM/EXP00/iodef_ar5.xml
r5363 r5385 271 271 <grid id="grid_W_2D" domain_ref="grid_W"/> 272 272 <grid id="grid_W_3D" domain_ref="grid_W" axis_ref="depthw"/> 273 <grid id="gznl_T_2D" domain_ref="gznl"/> 274 <grid id="gznl_T_3D" domain_ref="gznl" axis_ref="deptht"/> 275 <grid id="gznl_W_3D" domain_ref="gznl" axis_ref="depthw"/> 273 276 </grid_definition> 274 277 -
trunk/NEMOGCM/CONFIG/ORCA2_LIM/EXP00/iodef_crs.xml
r5363 r5385 146 146 <grid id="grid_W_2D" domain_ref="grid_W"/> 147 147 <grid id="grid_W_3D" domain_ref="grid_W" axis_ref="depthw"/> 148 <grid id="gznl_T_2D" domain_ref="gznl"/> 149 <grid id="gznl_T_3D" domain_ref="gznl" axis_ref="deptht"/> 150 <grid id="gznl_W_3D" domain_ref="gznl" axis_ref="depthw"/> 148 151 </grid_definition> 149 152 </context> -
trunk/NEMOGCM/CONFIG/ORCA2_LIM/EXP00/iodef_demo.xml
r5363 r5385 101 101 <grid id="grid_W_2D" domain_ref="grid_W"/> 102 102 <grid id="grid_W_3D" domain_ref="grid_W" axis_ref="depthw"/> 103 <grid id="gznl_T_2D" domain_ref="gznl"/> 104 <grid id="gznl_T_3D" domain_ref="gznl" axis_ref="deptht"/> 105 <grid id="gznl_W_3D" domain_ref="gznl" axis_ref="depthw"/> 103 106 </grid_definition> 104 107 -
trunk/NEMOGCM/CONFIG/ORCA2_LIM/EXP00/iodef_oldstyle.xml
r5363 r5385 133 133 <grid id="grid_W_2D" domain_ref="grid_W"/> 134 134 <grid id="grid_W_3D" domain_ref="grid_W" axis_ref="depthw"/> 135 <grid id="gznl_T_2D" domain_ref="gznl"/> 136 <grid id="gznl_T_3D" domain_ref="gznl" axis_ref="deptht"/> 137 <grid id="gznl_W_3D" domain_ref="gznl" axis_ref="depthw"/> 135 138 </grid_definition> 136 139 </context> -
trunk/NEMOGCM/CONFIG/ORCA2_LIM/cpp_ORCA2_LIM.fcm
r4990 r5385 1 bld::tool::fppkeys key_trabbl key_lim2 key_dynspg_flt key_diaeiv key_ldfslp key_traldf_c2d key_traldf_eiv key_dynldf_c3d key_zdftke key_zdfddm key_zdftmx key_iomput key_mpp_mpi key_diaobs key_asminc 1 bld::tool::fppkeys key_trabbl key_lim2 key_dynspg_flt key_diaeiv key_ldfslp key_traldf_c2d key_traldf_eiv key_dynldf_c3d key_zdftke key_zdfddm key_zdftmx key_iomput key_mpp_mpi key_diaobs key_asminc -
trunk/NEMOGCM/CONFIG/ORCA2_LIM3/EXP00/iodef.xml
r5363 r5385 320 320 <grid id="grid_W_2D" domain_ref="grid_W"/> 321 321 <grid id="grid_W_3D" domain_ref="grid_W" axis_ref="depthw"/> 322 <grid id="gznl_T_2D" domain_ref="gznl"/> 323 <grid id="gznl_T_3D" domain_ref="gznl" axis_ref="deptht"/> 324 <grid id="gznl_W_3D" domain_ref="gznl" axis_ref="depthw"/> 322 325 </grid_definition> 323 326 </context> -
trunk/NEMOGCM/CONFIG/ORCA2_LIM3/cpp_ORCA2_LIM3.fcm
r4994 r5385 1 bld::tool::fppkeys key_trabbl key_lim3 key_vvl key_dynspg_ts key_diaeiv key_ldfslp key_traldf_c2d key_traldf_eiv key_dynldf_c3d key_zdftke key_zdfddm key_zdftmx key_iomput key_mpp_mpi key_diaobs key_asminc 1 bld::tool::fppkeys key_trabbl key_lim3 key_vvl key_dynspg_ts key_diaeiv key_ldfslp key_traldf_c2d key_traldf_eiv key_dynldf_c3d key_zdftke key_zdfddm key_zdftmx key_iomput key_mpp_mpi key_diaobs key_asminc -
trunk/NEMOGCM/CONFIG/ORCA2_LIM_PISCES/EXP00/iodef.xml
r5363 r5385 47 47 </file> 48 48 49 <file id="file4" name_suffix="_bioscalar" description="pisces sms variables" >50 <field field_ref="tdenit" name="tdenit" unit="TgN/yr" operation="instant" > tdenit * 14. * 86400. * 365. / 1e12 </field>51 <field field_ref="tnfix" name="tnfix" unit="TgN/yr" operation="instant" > tnfix * 14. * 86400. * 365. / 1e12 </field>52 <field field_ref="tcflx" name="tcflx" unit="PgC/yr" operation="instant" > tcflx * -1. * 12. * 86400. * 365. / 1e15 </field>53 <field field_ref="tcflxcum" name="tcflxcum" unit="PgC" operation="instant" > tcflxcum * -1. * 12. / 1e15 </field>54 <field field_ref="tcexp" name="tcexp" unit="PgC/yr" operation="instant" > tcexp * 12. * 86400. * 365. / 1e15 </field>55 <field field_ref="tintpp" name="tintpp" unit="PgC/yr" operation="instant" > tintpp * 12. * 86400. * 365. / 1e15 </field>56 <field field_ref="pno3tot" name="pno3tot" unit="umolN" > pno3tot * 16. / 122. * 1e6 </field>57 <field field_ref="psiltot" name="psiltot" unit="umolC" > psiltot * 1e6</field>58 <field field_ref="palktot" name="palktot" unit="umolC" > palktot * 1e6 </field>59 <field field_ref="pfertot" name="pfertot" unit="nmolFe" > pfertot * 1e9</field>60 </file>61 49 <file id="file4" name_suffix="_bioscalar" description="pisces sms variables" > 50 <field field_ref="tdenit" name="tdenit" unit="TgN/yr" operation="instant" > tdenit * 14. * 86400. * 365. / 1e12 </field> 51 <field field_ref="tnfix" name="tnfix" unit="TgN/yr" operation="instant" > tnfix * 14. * 86400. * 365. / 1e12 </field> 52 <field field_ref="tcflx" name="tcflx" unit="PgC/yr" operation="instant" > tcflx * -1. * 12. * 86400. * 365. / 1e15 </field> 53 <field field_ref="tcflxcum" name="tcflxcum" unit="PgC" operation="instant" > tcflxcum * -1. * 12. / 1e15 </field> 54 <field field_ref="tcexp" name="tcexp" unit="PgC/yr" operation="instant" > tcexp * 12. * 86400. * 365. / 1e15 </field> 55 <field field_ref="tintpp" name="tintpp" unit="PgC/yr" operation="instant" > tintpp * 12. * 86400. * 365. / 1e15 </field> 56 <field field_ref="pno3tot" name="pno3tot" unit="umolN" > pno3tot * 16. / 122. * 1e6 </field> 57 <field field_ref="ppo4tot" name="ppo4tot" unit="umolP" > ppo4tot * 1. / 122. * 1e6 </field> 58 <field field_ref="psiltot" name="psiltot" unit="umolC" > psiltot * 1e6 </field> 59 <field field_ref="palktot" name="palktot" unit="umolC" > palktot * 1e6 </field> 60 <field field_ref="pfertot" name="pfertot" unit="nmolFe" > pfertot * 1e9 </field> 61 </file> 62 62 </file_group> 63 63 -
trunk/NEMOGCM/CONFIG/ORCA2_LIM_PISCES/EXP00/namelist_top_cfg
r4340 r5385 5 5 &namtrc_run ! run information 6 6 !----------------------------------------------------------------------- 7 ln_top_euler = .true. ! use Euler time-stepping for TOP8 7 / 9 8 !----------------------------------------------------------------------- -
trunk/NEMOGCM/CONFIG/ORCA2_OFF_PISCES/EXP00/iodef.xml
r5363 r5385 39 39 <field field_ref="tintpp" name="tintpp" unit="PgC/yr" operation="instant" > tintpp * 12. * 86400. * 365. / 1e15 </field> 40 40 <field field_ref="pno3tot" name="pno3tot" unit="umolN" > pno3tot * 16. / 122. * 1e6 </field> 41 <field field_ref="ppo4tot" name="ppo4tot" unit="umolP" > ppo4tot * 1. / 122. * 1e6 </field> 41 42 <field field_ref="psiltot" name="psiltot" unit="umolC" > psiltot * 1e6 </field> 42 43 <field field_ref="palktot" name="palktot" unit="umolC" > palktot * 1e6 </field> -
trunk/NEMOGCM/CONFIG/ORCA2_OFF_PISCES/EXP00/namelist_cfg
r4370 r5385 67 67 !----------------------------------------------------------------------- 68 68 nn_fsbc = 1 ! frequency of surface boundary condition computation 69 ln_rnf = .false. ! runoffs 69 70 / 70 71 !----------------------------------------------------------------------- -
trunk/NEMOGCM/CONFIG/ORCA2_OFF_PISCES/EXP00/namelist_top_cfg
r4340 r5385 6 6 !----------------------------------------------------------------------- 7 7 nn_writetrc = 1460 ! time step frequency for sn_tracer outputs 8 ln_top_euler = .true. ! use Euler time-stepping for TOP9 8 / 10 9 !----------------------------------------------------------------------- -
trunk/NEMOGCM/CONFIG/SHARED/domain_def.xml
r5147 r5385 6 6 <domain id="myzoom" zoom_ibegin="10" zoom_jbegin="10" zoom_ni="5" zoom_nj="5" /> 7 7 <domain id="1point" zoom_ibegin="10" zoom_jbegin="10" zoom_ni="1" zoom_nj="1" /> 8 <domain id="ptr" zoom_ibegin="0000" zoom_jbegin="1" zoom_ni="1" zoom_nj="0000" />9 8 <!-- Eq section --> 10 9 <domain id="EqT" zoom_ibegin="1" zoom_jbegin="0000" zoom_ni="0000" zoom_nj="1" /> … … 177 176 </domain_group> 178 177 178 <domain_group id="gznl"> 179 <domain id="ptr" long_name="zonal mean grid" zoom_ibegin="0000" zoom_jbegin="1" zoom_ni="1" zoom_nj="0000" /> 180 </domain_group> 181 182 179 183 </domain_definition> 180 184 -
trunk/NEMOGCM/CONFIG/SHARED/field_def.xml
r5363 r5385 565 565 566 566 <!-- Poleward transport : ptr --> 567 <field_group id="diaptr" domain_ref="ptr" 568 <field id="zomsfglo" long_name="Meridional Stream-Function: Global" unit="Sv" grid_ref="g rid_W_3D"/>569 <field id="zomsfatl" long_name="Meridional Stream-Function: Atlantic" unit="Sv" grid_ref="g rid_W_3D"/>570 <field id="zomsfpac" long_name="Meridional Stream-Function: Pacific" unit="Sv" grid_ref="g rid_W_3D"/>571 <field id="zomsfind" long_name="Meridional Stream-Function: Indian" unit="Sv" grid_ref="g rid_W_3D"/>572 <field id="zomsfipc" long_name="Meridional Stream-Function: Pacific+Indian" unit="Sv" grid_ref="g rid_W_3D"/>573 <field id="zotemglo" long_name="Zonal Mean Temperature : Global" unit="degC" grid_ref="g rid_T_3D"/>574 <field id="zotematl" long_name="Zonal Mean Temperature : Atlantic" unit="degC" grid_ref="g rid_T_3D"/>575 <field id="zotempac" long_name="Zonal Mean Temperature : Pacific" unit="degC" grid_ref="g rid_T_3D"/>576 <field id="zotemind" long_name="Zonal Mean Temperature : Indian" unit="degC" grid_ref="g rid_T_3D"/>577 <field id="zotemipc" long_name="Zonal Mean Temperature : Pacific+Indian" unit="degC" grid_ref="g rid_T_3D"/>578 <field id="zosalglo" long_name="Zonal Mean Salinity : Global" unit="1e-3" grid_ref="g rid_T_3D"/>579 <field id="zosalatl" long_name="Zonal Mean Salinity : Atlantic" unit="1e-3" grid_ref="g rid_T_3D"/>580 <field id="zosalpac" long_name="Zonal Mean Salinity : Pacific" unit="1e-3" grid_ref="g rid_T_3D"/>581 <field id="zosalind" long_name="Zonal Mean Salinity : Indian" unit="1e-3" grid_ref="g rid_T_3D"/>582 <field id="zosalipc" long_name="Zonal Mean Salinity : Pacific+Indian" unit="1e-3" grid_ref="g rid_T_3D"/>583 <field id="zosrfglo" long_name="Zonal Mean Surface" unit="m2" grid_ref="g rid_T_3D"/>584 <field id="zosrfatl" long_name="Zonal Mean Surface : Atlantic" unit="m2" grid_ref="g rid_T_3D"/>585 <field id="zosrfpac" long_name="Zonal Mean Surface : Pacific" unit="m2" grid_ref="g rid_T_3D"/>586 <field id="zosrfind" long_name="Zonal Mean Surface : Indian" unit="m2" grid_ref="g rid_T_3D"/>587 <field id="zosrfipc" long_name="Zonal Mean Surface : Pacific+Indian" unit="m2" grid_ref="g rid_T_3D"/>588 <field id="sophtadv" long_name="Advective Heat Transport" unit="PW" grid_ref="g rid_T_2D"/>589 <field id="sophtldf" long_name="Diffusive Heat Transport" unit="PW" grid_ref="g rid_T_2D"/>590 <field id="sopstadv" long_name="Advective Salt Transport" unit="Giga g/s" grid_ref="g rid_T_2D"/>591 <field id="sopstldf" long_name="Diffusive Salt Transport" unit="Giga g/s" grid_ref="g rid_T_2D"/>567 <field_group id="diaptr" domain_ref="ptr" > 568 <field id="zomsfglo" long_name="Meridional Stream-Function: Global" unit="Sv" grid_ref="gznl_W_3D" /> 569 <field id="zomsfatl" long_name="Meridional Stream-Function: Atlantic" unit="Sv" grid_ref="gznl_W_3D" /> 570 <field id="zomsfpac" long_name="Meridional Stream-Function: Pacific" unit="Sv" grid_ref="gznl_W_3D" /> 571 <field id="zomsfind" long_name="Meridional Stream-Function: Indian" unit="Sv" grid_ref="gznl_W_3D" /> 572 <field id="zomsfipc" long_name="Meridional Stream-Function: Pacific+Indian" unit="Sv" grid_ref="gznl_W_3D" /> 573 <field id="zotemglo" long_name="Zonal Mean Temperature : Global" unit="degC" grid_ref="gznl_T_3D" /> 574 <field id="zotematl" long_name="Zonal Mean Temperature : Atlantic" unit="degC" grid_ref="gznl_T_3D" /> 575 <field id="zotempac" long_name="Zonal Mean Temperature : Pacific" unit="degC" grid_ref="gznl_T_3D" /> 576 <field id="zotemind" long_name="Zonal Mean Temperature : Indian" unit="degC" grid_ref="gznl_T_3D" /> 577 <field id="zotemipc" long_name="Zonal Mean Temperature : Pacific+Indian" unit="degC" grid_ref="gznl_T_3D" /> 578 <field id="zosalglo" long_name="Zonal Mean Salinity : Global" unit="1e-3" grid_ref="gznl_T_3D" /> 579 <field id="zosalatl" long_name="Zonal Mean Salinity : Atlantic" unit="1e-3" grid_ref="gznl_T_3D" /> 580 <field id="zosalpac" long_name="Zonal Mean Salinity : Pacific" unit="1e-3" grid_ref="gznl_T_3D" /> 581 <field id="zosalind" long_name="Zonal Mean Salinity : Indian" unit="1e-3" grid_ref="gznl_T_3D" /> 582 <field id="zosalipc" long_name="Zonal Mean Salinity : Pacific+Indian" unit="1e-3" grid_ref="gznl_T_3D" /> 583 <field id="zosrfglo" long_name="Zonal Mean Surface" unit="m2" grid_ref="gznl_T_3D" /> 584 <field id="zosrfatl" long_name="Zonal Mean Surface : Atlantic" unit="m2" grid_ref="gznl_T_3D" /> 585 <field id="zosrfpac" long_name="Zonal Mean Surface : Pacific" unit="m2" grid_ref="gznl_T_3D" /> 586 <field id="zosrfind" long_name="Zonal Mean Surface : Indian" unit="m2" grid_ref="gznl_T_3D" /> 587 <field id="zosrfipc" long_name="Zonal Mean Surface : Pacific+Indian" unit="m2" grid_ref="gznl_T_3D" /> 588 <field id="sophtadv" long_name="Advective Heat Transport" unit="PW" grid_ref="gznl_T_2D" /> 589 <field id="sophtldf" long_name="Diffusive Heat Transport" unit="PW" grid_ref="gznl_T_2D" /> 590 <field id="sopstadv" long_name="Advective Salt Transport" unit="Giga g/s" grid_ref="gznl_T_2D" /> 591 <field id="sopstldf" long_name="Diffusive Salt Transport" unit="Giga g/s" grid_ref="gznl_T_2D" /> 592 592 </field_group> 593 593 … … 724 724 <!-- ptrc on T grid --> 725 725 726 <field_group id="ptrc_T" grid_ref="grid_T_3D"> 727 <field id="DIC" long_name="Dissolved inorganic Concentration" unit="mmol/m3" /> 728 <field id="Alkalini" long_name="Total Alkalinity Concentration" unit="mmol/m3" /> 729 <field id="O2" long_name="Oxygen Concentration" unit="mmol/m3" /> 730 <field id="CaCO3" long_name="Calcite Concentration" unit="mmol/m3" /> 731 <field id="PO4" long_name="Phosphate Concentration" unit="mmol/m3" /> 732 <field id="POC" long_name="Small organic carbon Concentration" unit="mmol/m3" /> 733 <field id="Si" long_name="Silicate Concentration" unit="mmol/m3" /> 734 <field id="PHY" long_name="(Nano)Phytoplankton Concentration" unit="mmol/m3" /> 735 <field id="ZOO" long_name="(Micro)Zooplankton Concentration" unit="mmol/m3" /> 736 <field id="DOC" long_name="Dissolved organic Concentration" unit="mmol/m3" /> 737 <field id="PHY2" long_name="Diatoms Concentration" unit="mmol/m3" /> 738 <field id="ZOO2" long_name="Mesozooplankton Concentration" unit="mmol/m3" /> 739 <field id="DSi" long_name="Diatoms Silicate Concentration" unit="mmol/m3" /> 740 <field id="Fer" long_name="Dissolved Iron Concentration" unit="mmol/m3" /> 741 <field id="BFe" long_name="Big iron particles Concentration" unit="mmol/m3" /> 742 <field id="GOC" long_name="Big organic carbon Concentration" unit="mmol/m3" /> 743 <field id="SFe" long_name="Small iron particles Concentration" unit="mmol/m3" /> 744 <field id="DFe" long_name="Diatoms iron Concentration" unit="mmol/m3" /> 745 <field id="GSi" long_name="Sinking biogenic Silicate Concentration" unit="mmol/m3" /> 746 <field id="NFe" long_name="Nano iron Concentration" unit="mmol/m3" /> 747 <field id="NCHL" long_name="Nano chlorophyl Concentration" unit="mg/m3" /> 748 <field id="DCHL" long_name="Diatoms chlorophyl Concentration" unit="mg/m3" /> 749 <field id="NO3" long_name="Nitrate Concentration" unit="mmol/m3" /> 750 <field id="NH4" long_name="Ammonium Concentration" unit="mmol/m3" /> 726 <field_group id="ptrc_T" grid_ref="grid_T_3D"> 727 <field id="DIC" long_name="Dissolved inorganic Concentration" unit="mmol/m3" /> 728 <field id="DIC_E3T" long_name="DIC * E3T" unit="mmol/m2" > DIC * e3t </field > 729 <field id="Alkalini" long_name="Total Alkalinity Concentration" unit="mmol/m3" /> 730 <field id="Alkalini_E3T" long_name="Alkalini * E3T" unit="mmol/m2" > Alkalini * e3t </field > 731 <field id="O2" long_name="Oxygen Concentration" unit="mmol/m3" /> 732 <field id="O2_E3T" long_name="O2 * E3T" unit="mmol/m2" > O2 * e3t </field > 733 <field id="CaCO3" long_name="Calcite Concentration" unit="mmol/m3" /> 734 <field id="CaCO3_E3T" long_name="CaCO3 * E3T" unit="mmol/m2" > CaCO3 * e3t </field > 735 <field id="PO4" long_name="Phosphate Concentration" unit="mmol/m3" /> 736 <field id="PO4_E3T" long_name="PO4 * E3T" unit="mmol/m2" > PO4 * e3t </field > 737 <field id="POC" long_name="Small organic carbon Concentration" unit="mmol/m3" /> 738 <field id="POC_E3T" long_name="POC * E3T" unit="mmol/m2" > POC * e3t </field > 739 <field id="Si" long_name="Silicate Concentration" unit="mmol/m3" /> 740 <field id="Si_E3T" long_name="Si * E3T" unit="mmol/m2" > Si * e3t </field > 741 <field id="PHY" long_name="(Nano)Phytoplankton Concentration" unit="mmol/m3" /> 742 <field id="PHY_E3T" long_name="PHY * E3T" unit="mmol/m2" > PHY * e3t </field > 743 <field id="ZOO" long_name="(Micro)Zooplankton Concentration" unit="mmol/m3" /> 744 <field id="ZOO_E3T" long_name="ZOO2 * E3T" unit="mmol/m2" > ZOO * e3t </field > 745 <field id="DOC" long_name="Dissolved organic Concentration" unit="mmol/m3" /> 746 <field id="DOC_E3T" long_name="DOC * E3T" unit="mmol/m2" > DOC * e3t </field > 747 <field id="PHY2" long_name="Diatoms Concentration" unit="mmol/m3" /> 748 <field id="PHY2_E3T" long_name="PHY2 * E3T" unit="mmol/m2" > PHY2 * e3t </field > 749 <field id="ZOO2" long_name="Mesozooplankton Concentration" unit="mmol/m3" /> 750 <field id="ZOO2_E3T" long_name="ZOO2 * E3T" unit="mmol/m2" > ZOO2 * e3t </field > 751 <field id="DSi" long_name="Diatoms Silicate Concentration" unit="mmol/m3" /> 752 <field id="DSi_E3T" long_name="Dsi * E3T" unit="mmol/m2" > DSi * e3t </field > 753 <field id="Fer" long_name="Dissolved Iron Concentration" unit="mmol/m3" /> 754 <field id="Fer_E3T" long_name="Fer * E3T" unit="mmol/m2" > Fer * e3t </field > 755 <field id="BFe" long_name="Big iron particles Concentration" unit="mmol/m3" /> 756 <field id="BFe_E3T" long_name="BFe * E3T" unit="mmol/m2" > BFe * e3t </field > 757 <field id="GOC" long_name="Big organic carbon Concentration" unit="mmol/m3" /> 758 <field id="GOC_E3T" long_name="GOC * E3T" unit="mmol/m2" > GOC * e3t </field > 759 <field id="SFe" long_name="Small iron particles Concentration" unit="mmol/m3" /> 760 <field id="SFe_E3T" long_name="SFe * E3T" unit="mmol/m2" > SFe * e3t </field > 761 <field id="DFe" long_name="Diatoms iron Concentration" unit="mmol/m3" /> 762 <field id="DFe_E3T" long_name="DFe * E3T" unit="mmol/m2" > DFe * e3t </field > 763 <field id="GSi" long_name="Sinking biogenic Silicate Concentration" unit="mmol/m3" /> 764 <field id="GSi_E3T" long_name="GSi * E3T" unit="mmol/m2" > GSi * e3t </field > 765 <field id="NFe" long_name="Nano iron Concentration" unit="mmol/m3" /> 766 <field id="NFe_E3T" long_name="NFe * E3T" unit="mmol/m2" > NFe * e3t </field > 767 <field id="NCHL" long_name="Nano chlorophyl Concentration" unit="mg/m3" /> 768 <field id="NCHL_E3T" long_name="NCHL * E3T" unit="mmol/m2" > NCHL * e3t </field > 769 <field id="DCHL" long_name="Diatoms chlorophyl Concentration" unit="mg/m3" /> 770 <field id="DCHL_E3T" long_name="DCHL * E3T" unit="mmol/m2" > DCHL * e3t </field > 771 <field id="NO3" long_name="Nitrate Concentration" unit="mmol/m3" /> 772 <field id="NO3_E3T" long_name="NO3 * E3T" unit="mmol/m2" > NO3 * e3t </field > 773 <field id="NH4" long_name="Ammonium Concentration" unit="mmol/m3" /> 774 <field id="NH4_E3T" long_name="NH4 * E3T" unit="mmol/m2" > NH4 * e3t </field > 751 775 752 776 <!-- PISCES with Kriest parametisation : variables available with key_kriest --> 753 <field id="Num" long_name="Number of organic particles" unit="1" /> 777 <field id="Num" long_name="Number of organic particles" unit="1" /> 778 <field id="Num_E3T" long_name="Num * E3T" unit="m" > Num * e3t </field > 754 779 755 780 <!-- PISCES light : variables available with key_pisces_reduced --> 756 <field id="DET" long_name="Detritus" unit="mmol-N/m3" /> 757 <field id="DOM" long_name="Dissolved Organic Matter" unit="mmol-N/m3" /> 781 <field id="DET" long_name="Detritus" unit="mmol-N/m3" /> 782 <field id="DET_E3T" long_name="DET * E3T" unit="mmol-N/m2" > DET * e3t </field > 783 <field id="DOM" long_name="Dissolved Organic Matter" unit="mmol-N/m3" /> 784 <field id="DOM_E3T" long_name="DOM * E3T" unit="mmol-N/m2" > DOM * e3t </field > 758 785 759 786 <!-- CFC11 : variables available with key_cfc --> 760 <field id="CFC11" long_name="CFC-11 Concentration" unit="umol/m3" /> 787 <field id="CFC11" long_name="CFC-11 Concentration" unit="umol/m3" /> 788 <field id="CFC11_E3T" long_name="CFC11 * E3T" unit="umol/m2" > CFC11 * e3t </field > 761 789 <!-- Bomb C14 : variables available with key_c14b --> 762 <field id="C14B" long_name="Bomb C14 Concentration" unit="1" /> 790 <field id="C14B" long_name="Bomb C14 Concentration" unit="1" /> 791 <field id="C14B_E3T" long_name="C14B * E3T" unit="m" > C14B * e3t </field > 763 792 </field_group> 764 793 … … 770 799 <field id="CO3sat" long_name="CO3 saturation" unit="mol/m3" grid_ref="grid_T_3D" /> 771 800 <field id="PAR" long_name="Photosynthetically Available Radiation" unit="W/m2" grid_ref="grid_T_3D" /> 801 <field id="PARDM" long_name="Daily mean PAR" unit="W/m2" grid_ref="grid_T_3D" /> 772 802 <field id="PPPHY" long_name="Primary production of nanophyto" unit="mol/m3/s" grid_ref="grid_T_3D" /> 773 803 <field id="PPPHY2" long_name="Primary production of diatoms" unit="mol/m3/s" grid_ref="grid_T_3D" /> … … 883 913 <field_group id="PISCES_scalar" domain_ref="1point" > 884 914 <field id="pno3tot" long_name="global mean nitrate concentration" unit="mol/m3" /> 915 <field id="ppo4tot" long_name="global mean phosphorus concentration" unit="mol/m3" /> 885 916 <field id="psiltot" long_name="global mean silicate concentration" unit="mol/m3" /> 886 917 <field id="palktot" long_name="global mean alkalinity concentration" unit="mol/m3" /> -
trunk/NEMOGCM/CONFIG/SHARED/namelist_pisces_ref
r5148 r5385 207 207 / 208 208 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 209 &nampisice ! Prescribed sea ice tracers 210 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 211 ! constant ocean tracer concentrations are defined in trcice_pisces.F90 (Global, Arctic, Antarctic and Baltic) 212 ! trc_ice_ratio * betw 0 and 1: prescribed ice/ocean tracer concentration ratio 213 ! * -1 => the ice-ocean tracer concentration ratio follows the 214 ! ice-ocean salinity ratio 215 ! * -2 => tracer concentration in sea ice is prescribed and 216 ! trc_ice_prescr is used 217 ! trc_ice_prescr * prescribed tracer concentration. used only if 218 ! trc_ice_ratio = -2. equals -99 if not used. 219 ! cn_trc_o * 'GL' use global ocean values making the Baltic distinction only 220 ! 'AA' use specific Arctic/Antarctic/Baltic values 221 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 222 ! sn_tri_ ! trc_ice_ratio ! trc_ice_prescr ! cn_trc_o 223 sn_tri_dic = -1., -99., 'AA' 224 sn_tri_doc = 0., -99., 'AA' 225 sn_tri_tal = -1., -99., 'AA' 226 sn_tri_oxy = -1., -99., 'AA' 227 sn_tri_cal = 0., -99., 'AA' 228 sn_tri_po4 = -1., -99., 'AA' 229 sn_tri_poc = 0., -99., 'AA' 230 sn_tri_goc = 0., -99., 'AA' 231 sn_tri_bfe = 0., -99., 'AA' 232 sn_tri_num = 0., -99., 'AA' 233 sn_tri_sil = -1., -99., 'AA' 234 sn_tri_dsi = 0., -99., 'AA' 235 sn_tri_gsi = 0., -99., 'AA' 236 sn_tri_phy = 0., -99., 'AA' 237 sn_tri_dia = 0., -99., 'AA' 238 sn_tri_zoo = 0., -99., 'AA' 239 sn_tri_mes = 0., -99., 'AA' 240 sn_tri_fer = -2., 15E-9, 'AA' 241 sn_tri_sfe = 0., -99., 'AA' 242 sn_tri_dfe = 0., -99., 'AA' 243 sn_tri_nfe = 0., -99., 'AA' 244 sn_tri_nch = 0., -99., 'AA' 245 sn_tri_dch = 0., -99., 'AA' 246 sn_tri_no3 = -1., -99., 'AA' 247 sn_tri_nh4 = 1., -99., 'AA' 248 / 249 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 209 250 &nampiskrp ! Kriest parameterization : parameters "key_kriest" 210 251 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -
trunk/NEMOGCM/CONFIG/SHARED/namelist_ref
r5363 r5385 425 425 ln_rnf_tem = .false. ! read in temperature information for runoff 426 426 ln_rnf_sal = .false. ! read in salinity information for runoff 427 ln_rnf_depth_ini = .false. ! compute depth at initialisation from runoff file 428 rn_rnf_max = 5.735e-4 ! max value of the runoff climatologie over global domain ( ln_rnf_depth_ini = .true ) 429 rn_dep_max = 150. ! depth over which runoffs is spread ( ln_rnf_depth_ini = .true ) 430 nn_rnf_depth_file = 0 ! create (=1) a runoff depth file or not (=0) 427 431 / 428 432 !----------------------------------------------------------------------- -
trunk/NEMOGCM/CONFIG/SHARED/namelist_top_ref
r5341 r5385 52 52 &namtrc_ldf ! lateral diffusion scheme for passive tracer 53 53 !----------------------------------------------------------------------- 54 ln_trcldf_diff = .true. ! performs lateral diffusion (T) or not (F)55 54 ! ! Type of the operator : 56 55 ln_trcldf_lap = .true. ! laplacian operator … … 82 81 ! =2 no damping in the mixed layer (rho crieria) 83 82 cn_resto_tr = 'resto_tr.nc' ! create a damping.coeff NetCDF file (=1) or not (=0) 83 !----------------------------------------------------------------------- 84 &namtrc_ice ! Representation of sea ice growth & melt effects 85 !----------------------------------------------------------------------- 86 nn_ice_tr = -1 ! tracer concentration in sea ice 87 ! =-1 (no vvl: identical cc in ice and ocean / vvl: cc_ice = 0) 88 ! = 0 (no vvl: cc_ice = zero / vvl: cc_ice = ) 89 ! = 1 prescribed to a namelist value (implemented in pisces only) 84 90 / 85 91 !----------------------------------------------------------------------- -
trunk/NEMOGCM/CONFIG/cfg.txt
r5333 r5385 7 7 AMM12 OPA_SRC 8 8 ORCA2_LIM_PISCES OPA_SRC LIM_SRC_2 NST_SRC TOP_SRC 9 ORCA2_OFF_PISCES OPA_SRC OFF_SRC TOP_SRC10 9 GYRE OPA_SRC 11 10 ORCA2_LIM3 OPA_SRC LIM_SRC_3 NST_SRC 12 11 ORCA2_LIM OPA_SRC LIM_SRC_2 NST_SRC 12 ORCA2_OFF_PISCES OPA_SRC OFF_SRC TOP_SRC 13 ORCA2_LIM_OBS OPA_SRC LIM_SRC_2 NST_SRC -
trunk/NEMOGCM/NEMO/LIM_SRC_2/ice_2.F90
r5341 r5385 67 67 68 68 !!* Ice Rheology 69 70 LOGICAL , PUBLIC:: ltrcdm2dc_ice = .FALSE. !: In case of Diurnal Cycle short wave, compute a Daily Mean short waves flux71 72 69 # if defined key_lim2_vp 73 70 ! !!* VP rheology * … … 115 112 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qdtcn !: energy from the ice to the ocean point (at a factor 2) 116 113 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: thcm !: part of the solar energy used in the lead heat budget 117 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fstric_ daymean!: Solar flux transmitted trough the ice, for day mean of qsr ( PISCES, with dirunal cycle )114 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fstric_mean !: Solar flux transmitted trough the ice, for day mean of qsr ( PISCES, with dirunal cycle ) 118 115 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fstric !: Solar flux transmitted trough the ice 119 116 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ffltbif !: linked with the max heat contained in brine pockets (?) … … 175 172 & tbif (jpi,jpj,jplayersp1) , STAT=ierr(5)) 176 173 177 IF( ltrcdm2dc_ice ) ALLOCATE(fstric_daymean(jpi,jpj), STAT=ierr(6) )178 179 174 !* moment used in the advection scheme 180 175 ALLOCATE(sxice (jpi,jpj) , syice (jpi,jpj) , sxxice(jpi,jpj) , & … … 203 198 !! Default option Empty module NO LIM 2.0 sea-ice model 204 199 !!---------------------------------------------------------------------- 205 LOGICAL , PUBLIC:: ltrcdm2dc_ice = .FALSE. !: In case of Diurnal Cycle short wave, compute a Daily Mean short waves flux206 200 #endif 207 201 !!----------------------------------------------------------------- -
trunk/NEMOGCM/NEMO/LIM_SRC_2/iceini_2.F90
r5341 r5385 60 60 ENDIF 61 61 ! 62 ! When Diurnal cycle, core bulk and LIM2 are activated,63 ! a daily mean qsr is computed for tracer/biogeochemistery model !64 IF( ltrcdm2dc )THEN ; ltrcdm2dc_ice = .TRUE.65 ELSE ; ltrcdm2dc_ice = .FALSE.66 ENDIF67 62 ! ! Allocate the ice arrays 68 63 ierr = ice_alloc_2 () ! ice variables -
trunk/NEMOGCM/NEMO/LIM_SRC_2/limsbc_2.F90
r4990 r5385 46 46 PUBLIC lim_sbc_flx_2 ! called by sbc_ice_lim_2 47 47 PUBLIC lim_sbc_tau_2 ! called by sbc_ice_lim_2 48 PUBLIC lim_bio_meanqsr_2 ! called by sbc_ice_lim_249 48 50 49 REAL(wp) :: r1_rdtice ! = 1. / rdt_ice … … 430 429 END SUBROUTINE lim_sbc_tau_2 431 430 432 SUBROUTINE lim_bio_meanqsr_2433 !!---------------------------------------------------------------------434 !! *** ROUTINE lim_bio_meanqsr435 !!436 !! ** Purpose : provide daily qsr_mean for PISCES when437 !! analytic diurnal cycle is applied in physic438 !!439 !! ** Method : add part under ice440 !!441 !!---------------------------------------------------------------------442 443 qsr_mean(:,:) = pfrld(:,:) * qsr_mean(:,:) + ( 1. - pfrld(:,:) ) * fstric_daymean(:,:)444 445 END SUBROUTINE lim_bio_meanqsr_2446 431 447 432 SUBROUTINE lim_sbc_init_2 -
trunk/NEMOGCM/NEMO/LIM_SRC_2/limthd_2.F90
r4990 r5385 114 114 CALL wrk_alloc( jpi, jpj, jpk, zmsk ) 115 115 116 IF( kt == nit000 ) CALL lim_thd_init_2 ! Initialization (first time-step only)116 IF( kt == nit000 ) CALL lim_thd_init_2 ! Initialization (first time-step only) 117 117 118 118 !-------------------------------------------! … … 137 137 rdq_ice(:,:) = 0.e0 ! heat content associated with rdm_ice 138 138 zmsk (:,:,:) = 0.e0 139 IF( ltrcdm2dc_ice ) fstric_daymean (:,:) = 0.e0 ! part of solar radiation absorbing inside the ice140 139 141 140 ! set to zero snow thickness smaller than epsi04 … … 285 284 CALL tab_2d_1d_2( nbpb, tbif_1d (1:nbpb , 3 ), tbif(:,:,3) , jpi, jpj, npb(1:nbpb) ) 286 285 CALL tab_2d_1d_2( nbpb, qsr_ice_1d (1:nbpb) , qsr_ice(:,:,1) , jpi, jpj, npb(1:nbpb) ) 287 IF( ltrcdm2dc_ice ) &288 & CALL tab_2d_1d_2( nbpb, qsr_ice_mean_1d (1:nbpb), qsr_ice_mean(:,:,1), jpi, jpj, npb(1:nbpb) )289 286 CALL tab_2d_1d_2( nbpb, fr1_i0_1d (1:nbpb) , fr1_i0 , jpi, jpj, npb(1:nbpb) ) 290 287 CALL tab_2d_1d_2( nbpb, fr2_i0_1d (1:nbpb) , fr2_i0 , jpi, jpj, npb(1:nbpb) ) … … 336 333 CALL tab_1d_2d_2( nbpb, qsr_ice(:,:,1), npb, qsr_ice_1d(1:nbpb) , jpi, jpj ) 337 334 CALL tab_1d_2d_2( nbpb, qns_ice(:,:,1), npb, qns_ice_1d(1:nbpb) , jpi, jpj ) 338 IF( ltrcdm2dc_ice )THEN 339 CALL tab_1d_2d_2( nbpb, fstric_daymean , npb, fstbif_daymean_1d (1:nbpb) , jpi, jpj ) 340 CALL tab_1d_2d_2( nbpb, qsr_ice_mean(:,:,1), npb, qsr_ice_mean_1d(1:nbpb) , jpi, jpj ) 341 ENDIF 342 IF( .NOT. lk_cpl ) CALL tab_1d_2d_2( nbpb, qla_ice(:,:,1), npb, qla_ice_1d(1:nbpb) , jpi, jpj ) 335 IF( .NOT. lk_cpl ) CALL tab_1d_2d_2( nbpb, qla_ice(:,:,1), npb, qla_ice_1d(1:nbpb), jpi, jpj ) 343 336 ! 344 337 ENDIF -
trunk/NEMOGCM/NEMO/LIM_SRC_2/limthd_zdf_2.F90
r4990 r5385 273 273 END DO 274 274 275 IF( ltrcdm2dc_ice )THEN276 277 DO ji = kideb , kiut278 zihsn = MAX( zzero , SIGN (zone , -h_snow_1d(ji) ) )279 zihic = MAX( zzero , 1.0 - ( h_ice_1d(ji) / zhsu ) )280 zi0(ji) = zihsn * ( fr1_i0_1d(ji) + zihic * fr2_i0_1d(ji) )281 zexp = MIN( zone , EXP( -1.5 * ( h_ice_1d(ji) - zhsu ) ) )282 fstbif_daymean_1d(ji) = zi0(ji) * qsr_ice_mean_1d(ji) * zexp283 END DO284 285 ENDIF286 287 275 !-------------------------------------------------------------------------------- 288 276 ! 4. Computation of the surface temperature : determined by considering the -
trunk/NEMOGCM/NEMO/LIM_SRC_2/thd_ice_2.F90
r4306 r5385 55 55 fstbif_1d , & !: " " fstric 56 56 fltbif_1d , & !: " " ffltbif 57 fstbif_daymean_1d, & !: " " fstric_daymean58 57 fscbq_1d , & !: " " fscmcbq 59 58 qsr_ice_1d , & !: " " qsr_ice 60 qsr_ice_mean_1d , & !: " " qsr_ice_mean61 59 fr1_i0_1d , & !: " " fr1_i0 62 60 fr2_i0_1d , & !: " " fr2_i0 … … 122 120 & tbif_1d(jpij, jplayersp1), Stat=ierr(4)) 123 121 ! 124 IF( ltrcdm2dc_ice )ALLOCATE(fstbif_daymean_1d(jpij),qsr_ice_mean_1d(jpij),Stat=ierr(5))125 !126 122 thd_ice_alloc_2 = MAXVAL(ierr) 127 123 IF( thd_ice_alloc_2 /= 0 ) CALL ctl_warn('thd_ice_alloc_2: failed to allocate arrays') -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limthd.F90
r5202 r5385 670 670 CALL tab_1d_2d( nbpb, qns_ice(:,:,jl), npb, qns_ice_1d(1:nbpb) , jpi, jpj) 671 671 CALL tab_1d_2d( nbpb, ftr_ice(:,:,jl), npb, ftr_ice_1d(1:nbpb) , jpi, jpj ) 672 672 ! 673 673 END SELECT 674 674 -
trunk/NEMOGCM/NEMO/LIM_SRC_3/limthd_dif.F90
r5202 r5385 283 283 END DO 284 284 285 !286 285 !------------------------------------------------------------------------------| 287 286 ! 3) Iterative procedure begins | -
trunk/NEMOGCM/NEMO/OFF_SRC/dtadyn.F90
r5131 r5385 264 264 fr_i(:,:) = sf_dyn(jf_ice)%fnow(:,:,1) * tmask(:,:,1) ! Sea-ice fraction 265 265 qsr (:,:) = sf_dyn(jf_qsr)%fnow(:,:,1) * tmask(:,:,1) ! solar radiation 266 IF 266 IF( ln_dynrnf ) & 267 267 rnf (:,:) = sf_dyn(jf_rnf)%fnow(:,:,1) * tmask(:,:,1) ! river runoffs 268 268 … … 388 388 389 389 ! 390 IF 390 IF( ln_dynrnf ) THEN 391 391 jf_rnf = jfld + 1 ; jfld = jf_rnf 392 392 slf_d(jf_rnf) = sn_rnf -
trunk/NEMOGCM/NEMO/OPA_SRC/DIA/diafwb.F90
r4990 r5385 51 51 INTEGER, INTENT( in ) :: kt ! ocean time-step index 52 52 !! 53 INTEGER :: inum ! temporary logical unit 54 INTEGER :: ji, jj, jk, jt ! dummy loop indices 55 INTEGER :: ii0, ii1, ij0, ij1 56 REAL(wp) :: zarea, zvol, zwei 57 REAL(wp) :: ztemi(4), ztemo(4), zsali(4), zsalo(4), zflxi(4), zflxo(4) 58 REAL(wp) :: zt, zs, zu 59 REAL(wp) :: zsm0, zfwfnew 53 INTEGER :: inum ! temporary logical unit 54 INTEGER :: ji, jj, jk, jt ! dummy loop indices 55 INTEGER :: ii0, ii1, ij0, ij1 56 INTEGER :: isrow ! index for ORCA1 starting row 57 REAL(wp) :: zarea, zvol, zwei 58 REAL(wp) :: ztemi(4), ztemo(4), zsali(4), zsalo(4), zflxi(4), zflxo(4) 59 REAL(wp) :: zt, zs, zu 60 REAL(wp) :: zsm0, zfwfnew 60 61 IF( cp_cfg == "orca" .AND. jp_cfg == 1 .OR. jp_cfg == 2 .OR. jp_cfg == 4 ) THEN 61 62 !!---------------------------------------------------------------------- … … 165 166 CASE ( 1 ) ! ORCA_R1 configurations 166 167 ! ! ======================= 167 ii0 = 283 ; ii1 = 283 168 ij0 = 200 ; ij1 = 200 168 ! This dirty section will be suppressed by simplification process: all this will come back in input files 169 ! Currently these hard-wired indices relate to the original (pre-v3.6) configuration 170 ! which had a grid-size of 362x292. 171 ! This grid has been extended southwards for use with the under ice-shelf options (isf) introduced in v3.6. 172 ! The original domain can still be used optionally if the isf code is not activated. 173 ! An adjustment (isrow) is made to the hard-wired indices if the extended domain (362x332) is being used. 174 ! 175 IF ( jpjglo == 292 ) THEN ; isrow = 0 ! Using pre-v3.6 files or adjusted start row from isf-extended grid 176 ELSEIF( jpjglo == 332 ) THEN ; isrow = 40 ! Using full isfextended domain. 177 ENDIF ! Adjust jindices to account for more southerly starting latitude 178 ii0 = 283 ; ii1 = 283 179 ij0 = 201 + isrow ; ij1 = 201 + isrow 169 180 ! ! ======================= 170 181 CASE DEFAULT ! ORCA R05 or R025 … … 212 223 CASE ( 1 ) ! ORCA_R1 configurations 213 224 ! ! ======================= 214 ii0 = 282 ; ii1 = 282 215 ij0 = 200 ; ij1 = 200 225 ! This dirty section will be suppressed by simplification process: 226 ! all this will come back in input files 227 IF ( jpjglo == 292 ) THEN ; isrow = 0 228 ELSEIF( jpjglo == 332 ) THEN ; isrow = 39 229 ENDIF 230 ii0 = 282 ; ii1 = 282 231 ij0 = 201 + isrow ; ij1 = 201 + isrow 216 232 ! ! ======================= 217 233 CASE DEFAULT ! ORCA R05 or R025 … … 259 275 CASE ( 1 ) ! ORCA_R1 configurations 260 276 ! ! ======================= 261 ii0 = 331 ; ii1 = 331 262 ij0 = 176 ; ij1 = 176 277 ! This dirty section will be suppressed by simplification process: 278 ! all this will come back in input files 279 IF ( jpjglo == 292 ) THEN ; isrow = 0 280 ELSEIF( jpjglo == 332 ) THEN ; isrow = 39 281 ENDIF 282 ii0 = 331 ; ii1 = 331 283 ij0 = 176 + isrow ; ij1 = 176 + isrow 263 284 ! ! ======================= 264 285 CASE DEFAULT ! ORCA R05 or R025 … … 306 327 CASE ( 1 ) ! ORCA_R1 configurations 307 328 ! ! ======================= 308 ii0 = 297 ; ii1 = 297 309 ij0 = 230 ; ij1 = 230 329 ! This dirty section will be suppressed by simplification process: 330 ! all this will come back in input files 331 IF ( jpjglo == 292 ) THEN ; isrow = 0 332 ELSEIF( jpjglo == 332 ) THEN ; isrow = 39 333 ENDIF 334 ii0 = 297 ; ii1 = 297 335 ij0 = 230 + isrow ; ij1 = 230 + isrow 310 336 ! ! ======================= 311 337 CASE DEFAULT ! ORCA R05 or R025 -
trunk/NEMOGCM/NEMO/OPA_SRC/DOM/domhgr.F90
r5123 r5385 105 105 REAL(wp) :: zlam1, zcos_alpha, zim1 , zjm1 , ze1, ze1deg 106 106 REAL(wp) :: zphi1, zsin_alpha, zim05, zjm05 107 INTEGER :: isrow ! index for ORCA1 starting row 108 107 109 !!---------------------------------------------------------------------- 108 110 ! … … 159 161 IF( cp_cfg == "orca" .AND. jp_cfg == 1 ) THEN ! ORCA R1 configuration 160 162 ! ! ===================== 161 162 ii0 = 281 ; ii1 = 282 ! Gibraltar Strait (e2u = 20 km) 163 ij0 = 200 ; ij1 = 200 ; e2u( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 20.e3 163 ! This dirty section will be suppressed by simplification process: all this will come back in input files 164 ! Currently these hard-wired indices relate to the original (pre-v3.6) configuration 165 ! which had a grid-size of 362x292. 166 ! This grid has been extended southwards for use with the under ice-shelf options (isf) introduced in v3.6. 167 ! The original domain can still be used optionally if the isf code is not activated. 168 ! An adjustment (isrow) is made to the hard-wired indices if the extended domain (362x332) is being used. 169 ! 170 IF ( jpjglo == 292 ) THEN ; isrow = 0 ! Using pre-v3.6 files or adjusted start row from isf-extended grid 171 ELSEIF( jpjglo == 332 ) THEN ; isrow = 40 ! Using full isfextended domain. 172 ENDIF 173 ! 174 ii0 = 282 ; ii1 = 283 ! Gibraltar Strait (e2u = 20 km) 175 ij0 = 201 + isrow ; ij1 = 201 + isrow ; e2u( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 20.e3 164 176 IF(lwp) WRITE(numout,*) 165 177 IF(lwp) WRITE(numout,*) ' orca_r1: Gibraltar : e2u reduced to 20 km' 166 178 167 ii0 = 314 ; ii1 = 315 ! Bhosporus Strait (e2u = 10 km)168 ij0 = 208 ; ij1 = 208; e2u( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 10.e3179 ii0 = 314 ; ii1 = 315 ! Bhosporus Strait (e2u = 10 km) 180 ij0 = 208 + isrow ; ij1 = 208 + isrow ; e2u( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 10.e3 169 181 IF(lwp) WRITE(numout,*) 170 182 IF(lwp) WRITE(numout,*) ' orca_r1: Bhosporus : e2u reduced to 10 km' 171 183 172 ii0 = 44 ; ii1 = 44 ! Lombok Strait (e1v = 13 km)173 ij0 = 124 ; ij1 = 125; e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 13.e3184 ii0 = 44 ; ii1 = 44 ! Lombok Strait (e1v = 13 km) 185 ij0 = 124 + isrow ; ij1 = 125 + isrow ; e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 13.e3 174 186 IF(lwp) WRITE(numout,*) 175 187 IF(lwp) WRITE(numout,*) ' orca_r1: Lombok : e1v reduced to 10 km' 176 188 177 ii0 = 48 ; ii1 = 48 ! Sumba Strait (e1v = 8 km) [closed from bathy_11 on]178 ij0 = 124 ; ij1 = 125; e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 8.e3189 ii0 = 48 ; ii1 = 48 ! Sumba Strait (e1v = 8 km) [closed from bathy_11 on] 190 ij0 = 124 + isrow ; ij1 = 125 + isrow ; e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 8.e3 179 191 IF(lwp) WRITE(numout,*) 180 192 IF(lwp) WRITE(numout,*) ' orca_r1: Sumba : e1v reduced to 8 km' 181 193 182 ii0 = 53 ; ii1 = 53 ! Ombai Strait (e1v = 13 km)183 ij0 = 124 ; ij1 = 125; e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 13.e3194 ii0 = 53 ; ii1 = 53 ! Ombai Strait (e1v = 13 km) 195 ij0 = 124 + isrow ; ij1 = 125 + isrow ; e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 13.e3 184 196 IF(lwp) WRITE(numout,*) 185 197 IF(lwp) WRITE(numout,*) ' orca_r1: Ombai : e1v reduced to 13 km' 186 198 187 ii0 = 56 ; ii1 = 56 ! Timor Passage (e1v = 20 km)188 ij0 = 124 ; ij1 = 125; e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 20.e3199 ii0 = 56 ; ii1 = 56 ! Timor Passage (e1v = 20 km) 200 ij0 = 124 + isrow ; ij1 = 125 + isrow ; e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 20.e3 189 201 IF(lwp) WRITE(numout,*) 190 202 IF(lwp) WRITE(numout,*) ' orca_r1: Timor Passage : e1v reduced to 20 km' 191 203 192 ii0 = 55 ; ii1 = 55 ! West Halmahera Strait (e1v = 30 km)193 ij0 = 141 ; ij1 = 142; e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 30.e3204 ii0 = 55 ; ii1 = 55 ! West Halmahera Strait (e1v = 30 km) 205 ij0 = 141 + isrow ; ij1 = 142 + isrow ; e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 30.e3 194 206 IF(lwp) WRITE(numout,*) 195 207 IF(lwp) WRITE(numout,*) ' orca_r1: W Halmahera : e1v reduced to 30 km' 196 208 197 ii0 = 58 ; ii1 = 58 ! East Halmahera Strait (e1v = 50 km)198 ij0 = 141 ; ij1 = 142; e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 50.e3209 ii0 = 58 ; ii1 = 58 ! East Halmahera Strait (e1v = 50 km) 210 ij0 = 141 + isrow ; ij1 = 142 + isrow ; e1v( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 50.e3 199 211 IF(lwp) WRITE(numout,*) 200 212 IF(lwp) WRITE(numout,*) ' orca_r1: E Halmahera : e1v reduced to 50 km' 201 202 !203 204 !205 !206 213 ! 207 214 ! -
trunk/NEMOGCM/NEMO/OPA_SRC/DOM/dommsk.F90
r5120 r5385 134 134 INTEGER :: ijf, ijl, ij0, ij1 ! - - 135 135 INTEGER :: ios 136 INTEGER :: isrow ! index for ORCA1 starting row 136 137 INTEGER , POINTER, DIMENSION(:,:) :: imsk 137 138 REAL(wp), POINTER, DIMENSION(:,:) :: zwf … … 401 402 IF( cp_cfg == "orca" .AND. jp_cfg == 1 ) THEN ! ORCA R1 configuration 402 403 ! ! Increased lateral friction near of some straits 404 ! This dirty section will be suppressed by simplification process: all this will come back in input files 405 ! Currently these hard-wired indices relate to the original (pre-v3.6) configuration 406 ! which had a grid-size of 362x292. 407 ! This grid has been extended southwards for use with the under ice-shelf options (isf) introduced in v3.6. 408 ! The original domain can still be used optionally if the isf code is not activated. 409 ! An adjustment (isrow) is made to the hard-wired indices if the extended domain (362x332) is being used. 410 ! 411 IF ( jpjglo == 292 ) THEN ; isrow = 0 ! Using pre-v3.6 files or adjusted start row from isf-extended grid 412 ELSEIF( jpjglo == 332 ) THEN ; isrow = 40 ! Using full isfextended domain. 413 ENDIF 414 403 415 IF(lwp) WRITE(numout,*) 404 416 IF(lwp) WRITE(numout,*) ' orca_r1: increase friction near the following straits : ' 405 417 IF(lwp) WRITE(numout,*) ' Gibraltar ' 406 ii0 = 28 3 ; ii1 = 284! Gibraltar Strait407 ij0 = 20 0 ; ij1 = 200 ; fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =2._wp418 ii0 = 282 ; ii1 = 283 ! Gibraltar Strait 419 ij0 = 201 + isrow ; ij1 = 201 + isrow ; fmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 2._wp 408 420 409 421 IF(lwp) WRITE(numout,*) ' Bhosporus ' 410 ii0 = 314 ; ii1 = 315 ! Bhosporus Strait411 ij0 = 208 ; ij1 = 208 ; fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =2._wp422 ii0 = 314 ; ii1 = 315 ! Bhosporus Strait 423 ij0 = 208 + isrow ; ij1 = 208 + isrow ; fmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 2._wp 412 424 413 425 IF(lwp) WRITE(numout,*) ' Makassar (Top) ' 414 ii0 = 48 ; ii1 = 48 ! Makassar Strait (Top)415 ij0 = 149 ; ij1 = 150 ; fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =3._wp426 ii0 = 48 ; ii1 = 48 ! Makassar Strait (Top) 427 ij0 = 149 + isrow ; ij1 = 150 + isrow ; fmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 3._wp 416 428 417 429 IF(lwp) WRITE(numout,*) ' Lombok ' 418 ii0 = 44 ; ii1 = 44 ! Lombok Strait419 ij0 = 124 ; ij1 = 125 ; fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =2._wp430 ii0 = 44 ; ii1 = 44 ! Lombok Strait 431 ij0 = 124 + isrow ; ij1 = 125 + isrow ; fmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 2._wp 420 432 421 433 IF(lwp) WRITE(numout,*) ' Ombai ' 422 ii0 = 53 ; ii1 = 53 ! Ombai Strait423 ij0 = 124 ; ij1 = 125 ; fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1),1:jpk ) = 2._wp434 ii0 = 53 ; ii1 = 53 ! Ombai Strait 435 ij0 = 124 + isrow ; ij1 = 125 + isrow ; fmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 2._wp 424 436 425 437 IF(lwp) WRITE(numout,*) ' Timor Passage ' 426 ii0 = 56 ; ii1 = 56 ! Timor Passage427 ij0 = 124 ; ij1 = 125 ; fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1),1:jpk ) = 2._wp438 ii0 = 56 ; ii1 = 56 ! Timor Passage 439 ij0 = 124 + isrow ; ij1 = 125 + isrow ; fmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 2._wp 428 440 429 441 IF(lwp) WRITE(numout,*) ' West Halmahera ' 430 ii0 = 58 ; ii1 = 58 ! West Halmahera Strait431 ij0 = 141 ; ij1 = 142 ; fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1),1:jpk ) = 3._wp442 ii0 = 58 ; ii1 = 58 ! West Halmahera Strait 443 ij0 = 141 + isrow ; ij1 = 142 + isrow ; fmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 3._wp 432 444 433 445 IF(lwp) WRITE(numout,*) ' East Halmahera ' 434 ii0 = 55 ; ii1 = 55 ! East Halmahera Strait435 ij0 = 141 ; ij1 = 142 ; fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1),1:jpk ) = 3._wp446 ii0 = 55 ; ii1 = 55 ! East Halmahera Strait 447 ij0 = 141 + isrow ; ij1 = 142 + isrow ; fmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 3._wp 436 448 ! 437 449 ENDIF -
trunk/NEMOGCM/NEMO/OPA_SRC/DOM/domvvl.F90
r5120 r5385 1039 1039 INTEGER :: ji, jj, jk ! dummy loop indices 1040 1040 INTEGER :: ij0, ij1, ii0, ii1 ! dummy loop indices 1041 INTEGER :: isrow ! index for ORCA1 starting row 1041 1042 !! acc 1042 1043 !! Hmm with the time splitting these "fixes" seem to do more harm than good. Temporarily disabled for … … 1122 1123 IF( cp_cfg == "orca" .AND. jp_cfg == 1 ) THEN ! ORCA R1 configuration 1123 1124 ! ! ===================== 1124 ! 1125 ii0 = 281 ; ii1 = 282 ! Gibraltar Strait (e2u was modified) 1126 ij0 = 200 ; ij1 = 200 1125 ! This dirty section will be suppressed by simplification process: all this will come back in input files 1126 ! Currently these hard-wired indices relate to the original (pre-v3.6) configuration 1127 ! which had a grid-size of 362x292. 1128 ! This grid has been extended southwards for use with the under ice-shelf options (isf) introduced in v3.6. 1129 ! The original domain can still be used optionally if the isf code is not activated. 1130 ! An adjustment (isrow) is made to the hard-wired indices if the extended domain (362x332) is being used. 1131 ! 1132 IF ( jpjglo == 292 ) THEN ; isrow = 0 ! Using pre-v3.6 files or adjusted start row from isf-extended grid 1133 ELSEIF( jpjglo == 332 ) THEN ; isrow = 40 ! Using full isfextended domain. 1134 ENDIF 1135 ! 1136 ii0 = 282 ; ii1 = 283 ! Gibraltar Strait (e2u was modified) 1137 ij0 = 201 + isrow ; ij1 = 201 + isrow 1127 1138 DO jk = 1, jpkm1 1128 1139 DO jj = mj0(ij0), mj1(ij1) … … 1144 1155 END DO 1145 1156 ! 1146 ii0 = 314 ; ii1 = 315 ! Bhosporus Strait (e2u was modified)1147 ij0 = 208 ; ij1 = 2081157 ii0 = 314 ; ii1 = 315 ! Bhosporus Strait (e2u was modified) 1158 ij0 = 208 + isrow ; ij1 = 208 + isrow 1148 1159 DO jk = 1, jpkm1 1149 1160 DO jj = mj0(ij0), mj1(ij1) … … 1165 1176 END DO 1166 1177 ! 1167 ii0 = 44 ; ii1 = 44 ! Lombok Strait (e1v was modified)1168 ij0 = 124 ; ij1 = 1251178 ii0 = 44 ; ii1 = 44 ! Lombok Strait (e1v was modified) 1179 ij0 = 124 + isrow ; ij1 = 125 + isrow 1169 1180 DO jk = 1, jpkm1 1170 1181 DO jj = mj0(ij0), mj1(ij1) … … 1181 1192 END DO 1182 1193 ! 1183 ii0 = 48 ; ii1 = 48 ! Sumba Strait (e1v was modified) [closed from bathy_11 on]1184 ij0 = 124 ; ij1 = 1251194 ii0 = 48 ; ii1 = 48 ! Sumba Strait (e1v was modified) [closed from bathy_11 on] 1195 ij0 = 124 + isrow ; ij1 = 125 + isrow 1185 1196 DO jk = 1, jpkm1 1186 1197 DO jj = mj0(ij0), mj1(ij1) … … 1197 1208 END DO 1198 1209 ! 1199 ii0 = 53 ; ii1 = 53 ! Ombai Strait (e1v was modified)1200 ij0 = 124 ; ij1 = 1251210 ii0 = 53 ; ii1 = 53 ! Ombai Strait (e1v was modified) 1211 ij0 = 124 + isrow ; ij1 = 125 + isrow 1201 1212 DO jk = 1, jpkm1 1202 1213 DO jj = mj0(ij0), mj1(ij1) … … 1213 1224 END DO 1214 1225 ! 1215 ii0 = 56 ; ii1 = 56 ! Timor Passage (e1v was modified)1216 ij0 = 124 ; ij1 = 1251226 ii0 = 56 ; ii1 = 56 ! Timor Passage (e1v was modified) 1227 ij0 = 124 + isrow ; ij1 = 125 + isrow 1217 1228 DO jk = 1, jpkm1 1218 1229 DO jj = mj0(ij0), mj1(ij1) … … 1229 1240 END DO 1230 1241 ! 1231 ii0 = 55 ; ii1 = 55 ! West Halmahera Strait (e1v was modified)1232 ij0 = 141 ; ij1 = 1421242 ii0 = 55 ; ii1 = 55 ! West Halmahera Strait (e1v was modified) 1243 ij0 = 141 + isrow ; ij1 = 142 + isrow 1233 1244 DO jk = 1, jpkm1 1234 1245 DO jj = mj0(ij0), mj1(ij1) … … 1245 1256 END DO 1246 1257 ! 1247 ii0 = 58 ; ii1 = 58 ! East Halmahera Strait (e1v was modified)1248 ij0 = 141 ; ij1 = 1421258 ii0 = 58 ; ii1 = 58 ! East Halmahera Strait (e1v was modified) 1259 ij0 = 141 + isrow ; ij1 = 142 + isrow 1249 1260 DO jk = 1, jpkm1 1250 1261 DO jj = mj0(ij0), mj1(ij1) -
trunk/NEMOGCM/NEMO/OPA_SRC/DOM/domzgr.F90
r5332 r5385 484 484 CALL iom_close( inum ) 485 485 mbathy(:,:) = INT( bathy(:,:) ) 486 ! 487 ! CL : add Amazon deeper 488 IF( cp_cfg == "orca" .AND. jp_cfg == 1 ) THEN ! ORCA R1 configuration 489 ii0 = 230 ; ii1 = 245 ! Amazon area 490 ij0 = 140 ; ij1 = 155 ! no ocean shallower than 30 meters 491 DO ji = mi0(ii0), mi1(ii1) 492 DO jj = mj0(ij0), mj1(ij1) 493 IF( bathy(ji,jj) .LE. 30. .AND. bathy(ji,jj) .GT. 0.0 ) bathy(ji,jj) = 30._wp 494 END DO 495 END DO 496 IF(lwp) WRITE(numout,*) 497 IF(lwp) WRITE(numout,*) ' orca_r1: Amazon area not shallower than 30 meters for: ' 498 IF(lwp) WRITE(numout,*) ' Longitude index ',ii0, ii0 499 IF(lwp) WRITE(numout,*) ' Latitude index ',ij0, ij0 500 ENDIF 486 501 ! ! ===================== 487 502 IF( cp_cfg == "orca" .AND. jp_cfg == 2 ) THEN ! ORCA R2 configuration -
trunk/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90
r5363 r5385 126 126 CALL set_grid( "V", glamv, gphiv ) 127 127 CALL set_grid( "W", glamt, gphit ) 128 CALL set_grid_znl( gphit ) 128 129 ENDIF 129 130 … … 135 136 CALL set_grid( "V", glamv_crs, gphiv_crs ) 136 137 CALL set_grid( "W", glamt_crs, gphit_crs ) 138 CALL set_grid_znl( gphit_crs ) 137 139 ! 138 140 CALL dom_grid_glo ! Return to parent grid domain … … 1384 1386 1385 1387 1388 SUBROUTINE set_grid_znl( plat ) 1389 !!---------------------------------------------------------------------- 1390 !! *** ROUTINE set_grid_znl *** 1391 !! 1392 !! ** Purpose : define grids for zonal mean 1393 !! 1394 !!---------------------------------------------------------------------- 1395 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: plat 1396 ! 1397 REAL(wp), DIMENSION(:), ALLOCATABLE :: zlon 1398 INTEGER :: ni,nj, ix, iy 1399 1400 1401 ni=nlei-nldi+1 ; nj=nlej-nldj+1 ! define zonal mean domain (jpj*jpk) 1402 ALLOCATE( zlon(ni*nj) ) ; zlon(:) = 0. 1403 1404 CALL iom_set_domain_attr("gznl", ni_glo=jpiglo, nj_glo=jpjglo, ibegin=nimpp+nldi-1, jbegin=njmpp+nldj-1, ni=ni, nj=nj) 1405 CALL iom_set_domain_attr("gznl", data_dim=2, data_ibegin = 1-nldi, data_ni = jpi, data_jbegin = 1-nldj, data_nj = jpj) 1406 CALL iom_set_domain_attr("gznl", lonvalue = zlon, & 1407 & latvalue = RESHAPE(plat(nldi:nlei, nldj:nlej),(/ ni*nj /))) 1408 ! 1409 CALL dom_ngb( 180., 90., ix, iy, 'T' ) ! i-line that passes near the North Pole : Reference latitude (used in plots) 1410 CALL iom_set_domain_attr ('ptr', zoom_ibegin=ix, zoom_nj=jpjglo) 1411 CALL iom_update_file_name('ptr') 1412 ! 1413 END SUBROUTINE set_grid_znl 1414 1386 1415 SUBROUTINE set_scalar 1387 1416 !!---------------------------------------------------------------------- … … 1468 1497 CALL set_mooring( zlonpira, zlatpira ) 1469 1498 1470 ! diaptr : zonal mean1471 CALL dom_ngb( 180., 90., ix, iy, 'T' ) ! i-line that passes near the North Pole : Reference latitude (used in plots)1472 CALL iom_set_domain_attr ('ptr', zoom_ibegin=ix, zoom_nj=jpjglo)1473 CALL iom_update_file_name('ptr')1474 !1475 1499 1476 1500 END SUBROUTINE set_xmlatt -
trunk/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_ice.F90
r5123 r5385 58 58 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: qns_ice !: non solar heat flux over ice [W/m2] 59 59 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: qsr_ice !: solar heat flux over ice [W/m2] 60 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: qsr_ice_mean !: daily mean solar heat flux over ice [W/m2]61 60 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: qla_ice !: latent flux over ice [W/m2] 62 61 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: dqla_ice !: latent sensibility over ice [W/m2/K] … … 152 151 #endif 153 152 ! 154 #if defined key_lim2155 IF( ltrcdm2dc_ice ) ALLOCATE( qsr_ice_mean (jpi,jpj,jpl), STAT=ierr(3) )156 #endif157 !158 153 #if defined key_cice || defined key_lim2 159 154 IF( lk_cpl ) ALLOCATE( ht_i(jpi,jpj,jpl) , ht_s(jpi,jpj,jpl) , STAT=ierr(5) ) -
trunk/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_oce.F90
r5120 r5385 81 81 !! Ocean Surface Boundary Condition fields 82 82 !!---------------------------------------------------------------------- 83 INTEGER , PUBLIC :: ncpl_qsr_freq !: qsr coupling frequency per days from atmosphere 84 ! 83 85 LOGICAL , PUBLIC :: lhftau = .FALSE. !: HF tau used in TKE: mean(stress module) - module(mean stress) 84 LOGICAL , PUBLIC :: ltrcdm2dc !: In case of Diurnal Cycle short wave, compute a Daily Mean short waves flux85 86 !! !! now ! before !! 86 87 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: utau , utau_b !: sea surface i-stress (ocean referential) [N/m2] … … 90 91 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: wndm !: wind speed module at T-point (=|U10m-Uoce|) [m/s] 91 92 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qsr !: sea heat flux: solar [W/m2] 92 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qsr_mean !: daily mean sea heat flux: solar [W/m2]93 93 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qns , qns_b !: sea heat flux: non solar [W/m2] 94 94 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qsr_tot !: total solar heat flux (over sea and ice) [W/m2] … … 162 162 #endif 163 163 ! 164 IF( ltrcdm2dc ) ALLOCATE( qsr_mean(jpi,jpj) , STAT=ierr(5) )165 !166 164 sbc_oce_alloc = MAXVAL( ierr ) 167 165 IF( lk_mpp ) CALL mpp_sum ( sbc_oce_alloc ) -
trunk/NEMOGCM/NEMO/OPA_SRC/SBC/sbcblk_core.F90
r5065 r5385 22 22 !! blk_oce_core : computes momentum, heat and freshwater fluxes over ocean 23 23 !! blk_ice_core : computes momentum, heat and freshwater fluxes over ice 24 !! blk_bio_meanqsr : compute daily mean short wave radiation over the ocean25 !! blk_ice_meanqsr : compute daily mean short wave radiation over the ice26 24 !! turb_core_2z : Computes turbulent transfert coefficients 27 25 !! cd_neutral_10m : Estimate of the neutral drag coefficient at 10m … … 52 50 PUBLIC sbc_blk_core ! routine called in sbcmod module 53 51 PUBLIC blk_ice_core ! routine called in sbc_ice_lim module 54 PUBLIC blk_ice_meanqsr ! routine called in sbc_ice_lim module55 52 PUBLIC turb_core_2z ! routine calles in sbcblk_mfs module 56 53 … … 195 192 ! ! compute the surface ocean fluxes using CORE bulk formulea 196 193 IF( MOD( kt - 1, nn_fsbc ) == 0 ) CALL blk_oce_core( kt, sf, sst_m, ssu_m, ssv_m ) 197 198 ! If diurnal cycle is activated, compute a daily mean short waves flux for biogeochemistery199 IF( ltrcdm2dc ) CALL blk_bio_meanqsr200 194 201 195 #if defined key_cice … … 302 296 ELSE ; qsr(:,:) = zztmp * sf(jp_qsr)%fnow(:,:,1) * tmask(:,:,1) 303 297 ENDIF 298 304 299 zqlw(:,:) = ( sf(jp_qlw)%fnow(:,:,1) - Stef * zst(:,:)*zst(:,:)*zst(:,:)*zst(:,:) ) * tmask(:,:,1) ! Long Wave 305 300 ! ----------------------------------------------------------------------------- ! … … 611 606 ! 612 607 END SUBROUTINE blk_ice_core 613 614 615 SUBROUTINE blk_bio_meanqsr616 !!---------------------------------------------------------------------617 !! *** ROUTINE blk_bio_meanqsr618 !!619 !! ** Purpose : provide daily qsr_mean for PISCES when620 !! analytic diurnal cycle is applied in physic621 !!622 !! ** Method : add part where there is no ice623 !!624 !!---------------------------------------------------------------------625 IF( nn_timing == 1 ) CALL timing_start('blk_bio_meanqsr')626 !627 qsr_mean(:,:) = (1. - albo ) * sf(jp_qsr)%fnow(:,:,1)628 !629 IF( nn_timing == 1 ) CALL timing_stop('blk_bio_meanqsr')630 !631 END SUBROUTINE blk_bio_meanqsr632 633 634 SUBROUTINE blk_ice_meanqsr( palb, p_qsr_mean, pdim )635 !!---------------------------------------------------------------------636 !!637 !! ** Purpose : provide the daily qsr_mean over sea_ice for PISCES when638 !! analytic diurnal cycle is applied in physic639 !!640 !! ** Method : compute qsr641 !!642 !!---------------------------------------------------------------------643 REAL(wp), DIMENSION(:,:,:), INTENT(in ) :: palb ! ice albedo (clear sky) (alb_ice_cs) [%]644 REAL(wp), DIMENSION(:,:,:), INTENT( out) :: p_qsr_mean ! solar heat flux over ice (T-point) [W/m2]645 INTEGER , INTENT(in ) :: pdim ! number of ice categories646 !647 INTEGER :: ijpl ! number of ice categories (size of 3rd dim of input arrays)648 INTEGER :: ji, jj, jl ! dummy loop indices649 REAL(wp) :: zztmp ! temporary variable650 !!---------------------------------------------------------------------651 IF( nn_timing == 1 ) CALL timing_start('blk_ice_meanqsr')652 !653 ijpl = pdim ! number of ice categories654 zztmp = 1. / ( 1. - albo )655 ! ! ========================== !656 DO jl = 1, ijpl ! Loop over ice categories !657 ! ! ========================== !658 DO jj = 1 , jpj659 DO ji = 1, jpi660 p_qsr_mean(ji,jj,jl) = zztmp * ( 1. - palb(ji,jj,jl) ) * qsr_mean(ji,jj)661 END DO662 END DO663 END DO664 !665 IF( nn_timing == 1 ) CALL timing_stop('blk_ice_meanqsr')666 !667 END SUBROUTINE blk_ice_meanqsr668 669 608 670 609 SUBROUTINE turb_core_2z( zt, zu, sst, T_zt, q_sat, q_zt, dU, & -
trunk/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_lim_2.F90
r4990 r5385 194 194 & tprecip , sprecip , & 195 195 & fr1_i0 , fr2_i0 , cp_ice_msh , jpl ) 196 IF( ltrcdm2dc_ice ) CALL blk_ice_meanqsr( zalb_ice, qsr_ice_mean, jpl )197 196 198 197 CASE( jp_cpl ) ! Coupled formulation : atmosphere-ice stress only (fluxes provided after ice dynamics) … … 232 231 CALL sbc_cpl_ice_flx( frld, & 233 232 ! optional arguments, used only in 'mixed oce-ice' case 234 & palbi = zalb_ice, psst = sst_m, pist =zsist )233 & palbi=zalb_ice, psst=sst_m, pist=zsist ) 235 234 sprecip(:,:) = - emp_ice(:,:) ! Ugly patch, WARNING, in coupled mode, sublimation included in snow (parsub = 0.) 236 235 ENDIF 237 236 CALL lim_thd_2 ( kt ) ! Ice thermodynamics 238 237 CALL lim_sbc_flx_2 ( kt ) ! update surface ocean mass, heat & salt fluxes 239 #if defined key_top240 IF( ltrcdm2dc_ice )CALL lim_bio_meanqsr_2241 #endif242 238 243 239 IF( .NOT. lk_mpp )THEN -
trunk/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90
r5123 r5385 24 24 USE phycst ! physical constants 25 25 USE sbc_oce ! Surface boundary condition: ocean fields 26 USE trc_oce ! shared ocean-passive tracers variables 26 27 USE sbc_ice ! Surface boundary condition: ice fields 27 28 USE sbcdcy ! surface boundary condition: diurnal cycle … … 151 152 END SELECT 152 153 ! 153 #if defined key_top && ! defined key_offline154 ltrcdm2dc = (ln_dm2dc .AND. ln_blk_core .AND. nn_ice==2)155 IF( ltrcdm2dc )THEN156 IF(lwp)THEN157 WRITE(numout,*)"analytical diurnal cycle, core bulk formulation and LIM2 use: "158 WRITE(numout,*)"Diurnal cycle on physics but not in passive tracers"159 ENDIF160 ENDIF161 #else162 ltrcdm2dc = .FALSE.163 #endif164 165 !166 154 ! ! allocate sbc arrays 167 155 IF( sbc_oce_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'sbc_init : unable to allocate sbc_oce arrays' ) … … 238 226 & asked coupling with drag coefficient (ln_cdgw =T) or Stokes drift (ln_sdw=T) ') 239 227 ENDIF 240 241 228 ! ! Choice of the Surface Boudary Condition (set nsbc) 242 229 icpt = 0 … … 273 260 IF( ln_ssr ) CALL sbc_ssr_init ! Sea-Surface Restoring initialisation 274 261 ! 262 IF( ln_rnf ) CALL sbc_rnf_init ! Runof initialisation 263 ! 275 264 IF( nn_ice == 3 ) CALL sbc_lim_init ! LIM3 initialisation 276 265 … … 278 267 ! 279 268 IF( nsbc == jp_cpl ) CALL sbc_cpl_init (nn_ice) ! OASIS initialisation. must be done before first time step 280 269 281 270 END SUBROUTINE sbc_init 282 271 -
trunk/NEMOGCM/NEMO/OPA_SRC/SBC/sbcrnf.F90
r4990 r5385 37 37 ! !!* namsbc_rnf namelist * 38 38 CHARACTER(len=100), PUBLIC :: cn_dir !: Root directory for location of ssr files 39 LOGICAL , PUBLIC :: ln_rnf_depth !: depth river runoffs attribute specified in a file 39 LOGICAL , PUBLIC :: ln_rnf_depth !: depth river runoffs attribute specified in a file 40 LOGICAL :: ln_rnf_depth_ini !: depth river runoffs computed at the initialisation 41 REAL(wp) :: rn_rnf_max !: maximum value of the runoff climatologie ( ln_rnf_depth_ini = .true ) 42 REAL(wp) :: rn_dep_max !: depth over which runoffs is spread ( ln_rnf_depth_ini = .true ) 43 INTEGER :: nn_rnf_depth_file !: create (=1) a runoff depth file or not (=0) 40 44 LOGICAL , PUBLIC :: ln_rnf_tem !: temperature river runoffs attribute specified in a file 41 45 LOGICAL , PUBLIC :: ln_rnf_sal !: salinity river runoffs attribute specified in a file … … 104 108 ! 105 109 CALL wrk_alloc( jpi,jpj, ztfrz) 106 107 !108 IF( kt == nit000 ) CALL sbc_rnf_init ! Read namelist and allocate structures109 110 110 111 ! ! ---------------------------------------- ! … … 255 256 !!---------------------------------------------------------------------- 256 257 CHARACTER(len=32) :: rn_dep_file ! runoff file name 257 INTEGER :: ji, jj, jk ! dummy loop indices258 INTEGER :: ji, jj, jk, jm ! dummy loop indices 258 259 INTEGER :: ierror, inum ! temporary integer 259 260 INTEGER :: ios ! Local integer output status for namelist read 261 INTEGER :: nbrec ! temporary integer 262 REAL(wp) :: zacoef 263 REAL(wp), DIMENSION(12) :: zrec ! times records 264 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: zrnfcl 265 REAL(wp), DIMENSION(:,: ), ALLOCATABLE :: zrnf 260 266 ! 261 267 NAMELIST/namsbc_rnf/ cn_dir, ln_rnf_emp, ln_rnf_depth, ln_rnf_tem, ln_rnf_sal, & 262 268 & sn_rnf, sn_cnf , sn_s_rnf , sn_t_rnf , sn_dep_rnf, & 263 & ln_rnf_mouth , rn_hrnf , rn_avt_rnf, rn_rfact 269 & ln_rnf_mouth , rn_hrnf , rn_avt_rnf, rn_rfact, & 270 & ln_rnf_depth_ini , rn_dep_max , rn_rnf_max, nn_rnf_depth_file 264 271 !!---------------------------------------------------------------------- 265 272 ! … … 299 306 IF(lwp) WRITE(numout,*) 300 307 IF(lwp) WRITE(numout,*) ' runoffs directly provided in the precipitations' 301 IF( ln_rnf_depth .OR. ln_rnf_tem .OR. ln_rnf_sal ) THEN308 IF( ln_rnf_depth .OR. ln_rnf_tem .OR. ln_rnf_sal .OR. ln_rnf_depth_ini ) THEN 302 309 CALL ctl_warn( 'runoffs already included in precipitations, so runoff (T,S, depth) attributes will not be used' ) 303 ln_rnf_depth = .FALSE. ; ln_rnf_tem = .FALSE. ; ln_rnf_sal = .FALSE. 310 ln_rnf_depth = .FALSE. ; ln_rnf_tem = .FALSE. ; ln_rnf_sal = .FALSE. ; ln_rnf_depth_ini = .FALSE. 304 311 ENDIF 305 312 ! … … 375 382 END DO 376 383 END DO 384 ! 385 ELSE IF( ln_rnf_depth_ini ) THEN ! runoffs applied at the surface 386 ! 387 IF(lwp) WRITE(numout,*) 388 IF(lwp) WRITE(numout,*) ' depth of runoff computed once from max value of runoff' 389 IF(lwp) WRITE(numout,*) ' max value of the runoff climatologie (over global domain) rn_rnf_max = ', rn_rnf_max 390 IF(lwp) WRITE(numout,*) ' depth over which runoffs is spread rn_dep_max = ', rn_dep_max 391 IF(lwp) WRITE(numout,*) ' create (=1) a runoff depth file or not (=0) nn_rnf_depth_file = ', nn_rnf_depth_file 392 393 CALL iom_open( TRIM( sn_rnf%clname ), inum ) ! open runoff file 394 CALL iom_gettime( inum, zrec, kntime=nbrec) 395 ALLOCATE( zrnfcl(jpi,jpj,nbrec) ) ; ALLOCATE( zrnf(jpi,jpj) ) 396 DO jm = 1, nbrec 397 CALL iom_get( inum, jpdom_data, TRIM( sn_rnf%clvar ), zrnfcl(:,:,jm), jm ) 398 END DO 399 CALL iom_close( inum ) 400 zrnf(:,:) = MAXVAL( zrnfcl(:,:,:), DIM=3 ) ! maximum value in time 401 DEALLOCATE( zrnfcl ) 402 ! 403 h_rnf(:,:) = 1. 404 ! 405 zacoef = rn_dep_max / rn_rnf_max ! coef of linear relation between runoff and its depth (150m for max of runoff) 406 ! 407 WHERE( zrnf(:,:) > 0._wp ) h_rnf(:,:) = zacoef * zrnf(:,:) ! compute depth for all runoffs 408 ! 409 DO jj = 1, jpj ! take in account min depth of ocean rn_hmin 410 DO ji = 1, jpi 411 IF( zrnf(ji,jj) > 0._wp ) THEN 412 jk = mbkt(ji,jj) 413 h_rnf(ji,jj) = MIN( h_rnf(ji,jj), gdept_0(ji,jj,jk ) ) 414 ENDIF 415 END DO 416 END DO 417 ! 418 nk_rnf(:,:) = 0 ! number of levels on which runoffs are distributed 419 DO jj = 1, jpj 420 DO ji = 1, jpi 421 IF( zrnf(ji,jj) > 0._wp ) THEN 422 jk = 2 423 DO WHILE ( jk /= mbkt(ji,jj) .AND. gdept_0(ji,jj,jk) < h_rnf(ji,jj) ) ; jk = jk + 1 ; END DO 424 nk_rnf(ji,jj) = jk 425 ELSE 426 nk_rnf(ji,jj) = 1 427 ENDIF 428 END DO 429 END DO 430 ! 431 DEALLOCATE( zrnf ) 432 ! 433 DO jj = 1, jpj ! set the associated depth 434 DO ji = 1, jpi 435 h_rnf(ji,jj) = 0._wp 436 DO jk = 1, nk_rnf(ji,jj) 437 h_rnf(ji,jj) = h_rnf(ji,jj) + fse3t(ji,jj,jk) 438 END DO 439 END DO 440 END DO 441 ! 442 IF( nn_rnf_depth_file == 1 ) THEN ! save output nb levels for runoff 443 IF(lwp) WRITE(numout,*) ' create runoff depht file' 444 CALL iom_open ( TRIM( sn_dep_rnf%clname ), inum, ldwrt = .TRUE., kiolib = jprstlib ) 445 CALL iom_rstput( 0, 0, inum, 'rodepth', h_rnf ) 446 CALL iom_close ( inum ) 447 ENDIF 377 448 ELSE ! runoffs applied at the surface 378 449 nk_rnf(:,:) = 1 -
trunk/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90
r4990 r5385 143 143 ELSE ! Leap-Frog + Asselin filter time stepping 144 144 ! 145 IF( lk_vvl ) THEN ; CALL tra_nxt_vvl( kt, nit000, 'TRA', tsb, tsn, tsa, jpts ) ! variable volume level (vvl) 146 ELSE ; CALL tra_nxt_fix( kt, nit000, 'TRA', tsb, tsn, tsa, jpts ) ! fixed volume level 145 IF( lk_vvl ) THEN ; CALL tra_nxt_vvl( kt, nit000, rdttra, 'TRA', tsb, tsn, tsa, & 146 & sbc_tsc, sbc_tsc_b, jpts ) ! variable volume level (vvl) 147 ELSE ; CALL tra_nxt_fix( kt, nit000, 'TRA', tsb, tsn, tsa, jpts ) ! fixed volume level 147 148 ENDIF 148 149 ENDIF … … 241 242 242 243 243 SUBROUTINE tra_nxt_vvl( kt, kit000, cdtype, ptb, ptn, pta, kjpt )244 SUBROUTINE tra_nxt_vvl( kt, kit000, p2dt, cdtype, ptb, ptn, pta, psbc_tc, psbc_tc_b, kjpt ) 244 245 !!---------------------------------------------------------------------- 245 246 !! *** ROUTINE tra_nxt_vvl *** … … 265 266 !! - (ta,sa) time averaged (t,s) (ln_dynhpg_imp = T) 266 267 !!---------------------------------------------------------------------- 267 INTEGER , INTENT(in ) :: kt ! ocean time-step index 268 INTEGER , INTENT(in ) :: kit000 ! first time step index 269 CHARACTER(len=3), INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) 270 INTEGER , INTENT(in ) :: kjpt ! number of tracers 271 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: ptb ! before tracer fields 272 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: ptn ! now tracer fields 273 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: pta ! tracer trend 268 INTEGER , INTENT(in ) :: kt ! ocean time-step index 269 INTEGER , INTENT(in ) :: kit000 ! first time step index 270 REAL(wp) , INTENT(in ), DIMENSION(jpk) :: p2dt ! time-step 271 CHARACTER(len=3), INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) 272 INTEGER , INTENT(in ) :: kjpt ! number of tracers 273 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: ptb ! before tracer fields 274 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: ptn ! now tracer fields 275 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: pta ! tracer trend 276 REAL(wp) , INTENT(in ), DIMENSION(jpi,jpj,kjpt) :: psbc_tc ! surface tracer content 277 REAL(wp) , INTENT(in ), DIMENSION(jpi,jpj,kjpt) :: psbc_tc_b ! before surface tracer content 278 274 279 !! 275 LOGICAL :: ll_tra , ll_tra_hpg, ll_traqsr ! local logical280 LOGICAL :: ll_tra_hpg, ll_traqsr ! local logical 276 281 INTEGER :: ji, jj, jk, jn ! dummy loop indices 277 282 REAL(wp) :: zfact1, ztc_a , ztc_n , ztc_b , ztc_f , ztc_d ! local scalar … … 286 291 ! 287 292 IF( cdtype == 'TRA' ) THEN 288 ll_tra = .TRUE. ! active tracers case289 293 ll_tra_hpg = ln_dynhpg_imp ! active tracers case and semi-implicit hpg 290 294 ll_traqsr = ln_traqsr ! active tracers case and solar penetration 291 295 ELSE 292 ll_tra = .FALSE. ! passive tracers case293 296 ll_tra_hpg = .FALSE. ! passive tracers case or NO semi-implicit hpg 294 297 ll_traqsr = .FALSE. ! active tracers case and NO solar penetration … … 297 300 DO jn = 1, kjpt 298 301 DO jk = 1, jpkm1 299 zfact1 = atfp * rdttra(jk)302 zfact1 = atfp * p2dt(jk) 300 303 zfact2 = zfact1 / rau0 301 304 DO jj = 1, jpj … … 315 318 ztc_f = ztc_n + atfp * ztc_d 316 319 ! 317 IF( ll_tra .AND. jk == 1 ) THEN ! first level only for T & S318 319 ztc_f = ztc_f - zfact1 * ( sbc_tsc(ji,jj,jn) - sbc_tsc_b(ji,jj,jn) )320 IF( jk == 1 ) THEN ! first level 321 ze3t_f = ze3t_f - zfact2 * ( emp_b(ji,jj) - emp(ji,jj) ) 322 ztc_f = ztc_f - zfact1 * ( psbc_tc(ji,jj,jn) - psbc_tc_b(ji,jj,jn) ) 320 323 ENDIF 321 324 IF( ll_traqsr .AND. jn == jp_tem .AND. jk <= nksr ) & ! solar penetration (temperature only) -
trunk/NEMOGCM/NEMO/OPA_SRC/TRA/trazdf.F90
r4990 r5385 88 88 & tab3d_2=tsa(:,:,:,jp_sal), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) 89 89 END SELECT 90 ! DRAKKAR SSS control { 91 ! JMM avoid negative salinities near river outlet ! Ugly fix 92 ! JMM : restore negative salinities to small salinities: 93 WHERE ( tsa(:,:,:,jp_sal) < 0._wp ) tsa(:,:,:,jp_sal) = 0.1_wp 90 94 91 95 IF( l_trdtra ) THEN ! save the vertical diffusive trends for further diagnostics -
trunk/NEMOGCM/NEMO/OPA_SRC/trc_oce.F90
r4623 r5385 32 32 !! 'key_top' bio-model 33 33 !!---------------------------------------------------------------------- 34 LOGICAL, PUBLIC, PARAMETER :: lk_top = .TRUE. !: TOP model 34 35 LOGICAL, PUBLIC, PARAMETER :: lk_qsr_bio = .TRUE. !: bio-model light absorption flag 35 36 #else … … 37 38 !! Default option No bio-model light absorption 38 39 !!---------------------------------------------------------------------- 40 LOGICAL, PUBLIC, PARAMETER :: lk_top = .FALSE. !: TOP model 39 41 LOGICAL, PUBLIC, PARAMETER :: lk_qsr_bio = .FALSE. !: bio-model light absorption flag 40 42 #endif -
trunk/NEMOGCM/NEMO/TOP_SRC/MY_TRC/trcini_my_trc.F90
r2787 r5385 42 42 43 43 IF(lwp) WRITE(numout,*) 44 IF(lwp) WRITE(numout,*) ' trc_ini_my_trc: initialisation of MY_TRC model' 44 IF(lwp) WRITE(numout,*) ' trc_ini_my_trc: passive tracer unit vector' 45 IF(lwp) WRITE(numout,*) ' To check conservation : ' 46 IF(lwp) WRITE(numout,*) ' 1 - No sea-ice model ' 47 IF(lwp) WRITE(numout,*) ' 2 - No runoff ' 48 IF(lwp) WRITE(numout,*) ' 3 - precipitation and evaporation equal to 1 : E=P=1 ' 45 49 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~' 46 50 47 IF( .NOT. ln_rsttr ) trn(:,:,:,jp_myt0:jp_myt1) = 0.51 IF( .NOT. ln_rsttr ) trn(:,:,:,jp_myt0:jp_myt1) = 1. 48 52 ! 49 53 END SUBROUTINE trc_ini_my_trc -
trunk/NEMOGCM/NEMO/TOP_SRC/MY_TRC/trcsms_my_trc.F90
r4990 r5385 46 46 INTEGER :: jn ! dummy loop index 47 47 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrmyt 48 !!----------------------------------------------------------------------48 !!---------------------------------------------------------------------- 49 49 ! 50 50 IF( nn_timing == 1 ) CALL timing_start('trc_sms_my_trc') … … 55 55 56 56 IF( l_trdtrc ) CALL wrk_alloc( jpi, jpj, jpk, ztrmyt ) 57 58 WHERE( (glamt <= 170) .AND. (glamt >= 160) .AND. (gphit <= -74) .AND. (gphit >=-75.6) )59 trn(:,:,1,jpmyt1) = 1._wp60 trb(:,:,1,jpmyt1) = 1._wp61 tra(:,:,1,jpmyt1) = 0._wp62 END WHERE63 57 64 58 IF( l_trdtrc ) THEN ! Save the trends in the ixed layer -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P2Z/p2zopt.F90
r5215 r5385 89 89 90 90 ! ! surface irradiance 91 zpar0m (:,:) = qsr (:,:) * 0.43 ! ------------------ 91 ! ! ------------------ 92 IF( ln_dm2dc ) THEN ; zpar0m(:,:) = qsr_mean(:,:) * 0.43 93 ELSE ; zpar0m(:,:) = qsr (:,:) * 0.43 94 ENDIF 92 95 zpar100(:,:) = zpar0m(:,:) * 0.01 93 96 zparr (:,:,1) = zpar0m(:,:) * 0.5 -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zbio.F90
r4529 r5385 44 44 CONTAINS 45 45 46 SUBROUTINE p4z_bio ( kt, jnt )46 SUBROUTINE p4z_bio ( kt, knt ) 47 47 !!--------------------------------------------------------------------- 48 48 !! *** ROUTINE p4z_bio *** … … 54 54 !! ** Method : - ??? 55 55 !!--------------------------------------------------------------------- 56 INTEGER, INTENT(in) :: kt, jnt 57 INTEGER :: ji, jj, jk, jn 58 REAL(wp) :: ztra 59 #if defined key_kriest 60 REAL(wp) :: zcoef1, zcoef2 61 #endif 56 INTEGER, INTENT(in) :: kt, knt 57 INTEGER :: ji, jj, jk, jn 62 58 CHARACTER (len=25) :: charout 63 59 … … 80 76 81 77 82 CALL p4z_opt ( kt, jnt ) ! Optic: PAR in the water column83 CALL p4z_sink ( kt, jnt ) ! vertical flux of particulate organic matter84 CALL p4z_fechem(kt, jnt ) ! Iron chemistry/scavenging85 CALL p4z_lim ( kt, jnt ) ! co-limitations by the various nutrients86 CALL p4z_prod ( kt, jnt ) ! phytoplankton growth rate over the global ocean.78 CALL p4z_opt ( kt, knt ) ! Optic: PAR in the water column 79 CALL p4z_sink ( kt, knt ) ! vertical flux of particulate organic matter 80 CALL p4z_fechem(kt, knt ) ! Iron chemistry/scavenging 81 CALL p4z_lim ( kt, knt ) ! co-limitations by the various nutrients 82 CALL p4z_prod ( kt, knt ) ! phytoplankton growth rate over the global ocean. 87 83 ! ! (for each element : C, Si, Fe, Chl ) 88 84 CALL p4z_mort ( kt ) ! phytoplankton mortality 89 90 CALL p4z_micro( kt, jnt ) ! microzooplankton91 CALL p4z_meso ( kt, jnt ) ! mesozooplankton92 CALL p4z_rem ( kt, jnt ) ! remineralization terms of organic matter+scavenging of Fe85 ! ! zooplankton sources/sinks routines 86 CALL p4z_micro( kt, knt ) ! microzooplankton 87 CALL p4z_meso ( kt, knt ) ! mesozooplankton 88 CALL p4z_rem ( kt, knt ) ! remineralization terms of organic matter+scavenging of Fe 93 89 ! ! test if tracers concentrations fall below 0. 94 xnegtr(:,:,:) = 1.e0 95 DO jn = jp_pcs0, jp_pcs1 96 DO jk = 1, jpk 97 DO jj = 1, jpj 98 DO ji = 1, jpi 99 IF( ( trn(ji,jj,jk,jn) + tra(ji,jj,jk,jn) ) < 0.e0 ) THEN 100 ztra = ABS( trn(ji,jj,jk,jn) ) / ( ABS( tra(ji,jj,jk,jn) ) + rtrn ) 101 102 xnegtr(ji,jj,jk) = MIN( xnegtr(ji,jj,jk), ztra ) 103 ENDIF 104 END DO 105 END DO 106 END DO 107 END DO 108 ! ! where at least 1 tracer concentration becomes negative 109 ! ! 110 DO jn = jp_pcs0, jp_pcs1 111 trn(:,:,:,jn) = trn(:,:,:,jn) + xnegtr(:,:,:) * tra(:,:,:,jn) 112 END DO 113 114 115 tra(:,:,:,:) = 0.e0 116 117 #if defined key_kriest 118 ! 119 zcoef1 = 1.e0 / xkr_massp 120 zcoef2 = 1.e0 / xkr_massp / 1.1 121 DO jk = 1,jpkm1 122 trn(:,:,jk,jpnum) = MAX( trn(:,:,jk,jpnum), trn(:,:,jk,jppoc) * zcoef1 / xnumm(jk) ) 123 trn(:,:,jk,jpnum) = MIN( trn(:,:,jk,jpnum), trn(:,:,jk,jppoc) * zcoef2 ) 124 END DO 125 #endif 126 127 ! 90 ! ! 128 91 IF(ln_ctl) THEN ! print mean trends (used for debugging) 129 92 WRITE(charout, FMT="('bio ')") 130 93 CALL prt_ctl_trc_info(charout) 131 CALL prt_ctl_trc(tab4d=tr n, mask=tmask, clinfo=ctrcnm)94 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 132 95 ENDIF 133 96 ! -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zfechem.F90
r4996 r5385 48 48 CONTAINS 49 49 50 SUBROUTINE p4z_fechem( kt, jnt )50 SUBROUTINE p4z_fechem( kt, knt ) 51 51 !!--------------------------------------------------------------------- 52 52 !! *** ROUTINE p4z_fechem *** … … 62 62 !!--------------------------------------------------------------------- 63 63 ! 64 INTEGER, INTENT(in) :: kt, jnt ! ocean time step64 INTEGER, INTENT(in) :: kt, knt ! ocean time step 65 65 ! 66 66 INTEGER :: ji, jj, jk, jic … … 101 101 ! ------------------------------------------------- 102 102 IF( ln_ligvar ) THEN 103 ztotlig(:,:,:) = 0.09 * tr n(:,:,:,jpdoc) * 1E6 + ligand * 1E9103 ztotlig(:,:,:) = 0.09 * trb(:,:,:,jpdoc) * 1E6 + ligand * 1E9 104 104 ztotlig(:,:,:) = MIN( ztotlig(:,:,:), 10. ) 105 105 ELSE … … 127 127 zionic = 19.9201 * tsn(ji,jj,jk,jp_sal) / ( 1000. - 1.00488 * tsn(ji,jj,jk,jp_sal) + rtrn ) 128 128 zph = -LOG10( MAX( hi(ji,jj,jk), rtrn) ) 129 zoxy = tr n(ji,jj,jk,jpoxy) * ( rhop(ji,jj,jk) / 1.e3 )129 zoxy = trb(ji,jj,jk,jpoxy) * ( rhop(ji,jj,jk) / 1.e3 ) 130 130 ! Fe2+ oxydation rate from Santana-Casiano et al. (2005) 131 131 zkox = 35.407 - 6.7109 * zph + 0.5342 * zph * zph - 5362.6 / ( tsn(ji,jj,jk,jp_tem) + 273.15 ) & … … 137 137 zkph1 = zkph2 / 5. 138 138 ! pass the dfe concentration from PISCES 139 ztfe = tr n(ji,jj,jk,jpfer) * 1e9139 ztfe = trb(ji,jj,jk,jpfer) * 1e9 140 140 ! ---------------------------------------------------------- 141 141 ! ANALYTICAL SOLUTION OF ROOTS OF THE FE3+ EQUATION … … 204 204 zkeq = fekeq(ji,jj,jk) 205 205 zfesatur = zTL1(ji,jj,jk) * 1E-9 206 ztfe = tr n(ji,jj,jk,jpfer)206 ztfe = trb(ji,jj,jk,jpfer) 207 207 ! Fe' is the root of a 2nd order polynom 208 208 zFe3 (ji,jj,jk) = ( -( 1. + zfesatur * zkeq - zkeq * ztfe ) & … … 210 210 & + 4. * ztfe * zkeq) ) / ( 2. * zkeq ) 211 211 zFe3 (ji,jj,jk) = zFe3(ji,jj,jk) * 1E9 212 zFeL1(ji,jj,jk) = MAX( 0., tr n(ji,jj,jk,jpfer) * 1E9 - zFe3(ji,jj,jk) )212 zFeL1(ji,jj,jk) = MAX( 0., trb(ji,jj,jk,jpfer) * 1E9 - zFe3(ji,jj,jk) ) 213 213 END DO 214 214 END DO … … 240 240 ENDIF 241 241 #if defined key_kriest 242 ztrc = ( tr n(ji,jj,jk,jppoc) + trn(ji,jj,jk,jpcal) + trn(ji,jj,jk,jpgsi) ) * 1.e6242 ztrc = ( trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpcal) + trb(ji,jj,jk,jpgsi) ) * 1.e6 243 243 #else 244 ztrc = ( tr n(ji,jj,jk,jppoc) + trn(ji,jj,jk,jpgoc) + trn(ji,jj,jk,jpcal) + trn(ji,jj,jk,jpgsi) ) * 1.e6244 ztrc = ( trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpgoc) + trb(ji,jj,jk,jpcal) + trb(ji,jj,jk,jpgsi) ) * 1.e6 245 245 #endif 246 246 IF( ln_dust ) zdust = dust(ji,jj) / ( wdust / rday ) * tmask(ji,jj,jk) ! dust in kg/m2/s … … 251 251 ! to later allocate scavenged iron to the different organic pools 252 252 ! --------------------------------------------------------- 253 zdenom1 = xlam1 * tr n(ji,jj,jk,jppoc) / zlam1b253 zdenom1 = xlam1 * trb(ji,jj,jk,jppoc) / zlam1b 254 254 #if ! defined key_kriest 255 zdenom2 = xlam1 * tr n(ji,jj,jk,jpgoc) / zlam1b255 zdenom2 = xlam1 * trb(ji,jj,jk,jpgoc) / zlam1b 256 256 #endif 257 257 … … 262 262 zlamfac = MIN( 1. , zlamfac ) 263 263 zdep = MIN( 1., 1000. / fsdept(ji,jj,jk) ) 264 zlam1b = xlam1 * MAX( 0.e0, ( tr n(ji,jj,jk,jpfer) * 1.e9 - ztotlig(ji,jj,jk) ) )265 zcoag = zfeequi * zlam1b * zstep + 1E-4 * ( 1. - zlamfac ) * zdep * zstep * tr n(ji,jj,jk,jpfer)264 zlam1b = xlam1 * MAX( 0.e0, ( trb(ji,jj,jk,jpfer) * 1.e9 - ztotlig(ji,jj,jk) ) ) 265 zcoag = zfeequi * zlam1b * zstep + 1E-4 * ( 1. - zlamfac ) * zdep * zstep * trb(ji,jj,jk,jpfer) 266 266 267 267 ! Compute the coagulation of colloidal iron. This parameterization … … 269 269 ! It requires certainly some more work as it is very poorly constrained. 270 270 ! ---------------------------------------------------------------- 271 zlam1a = ( 0.369 * 0.3 * tr n(ji,jj,jk,jpdoc) + 102.4 * trn(ji,jj,jk,jppoc) ) * xdiss(ji,jj,jk) &272 & + ( 114. * 0.3 * tr n(ji,jj,jk,jpdoc) + 5.09E3 * trn(ji,jj,jk,jppoc) )271 zlam1a = ( 0.369 * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4 * trb(ji,jj,jk,jppoc) ) * xdiss(ji,jj,jk) & 272 & + ( 114. * 0.3 * trb(ji,jj,jk,jpdoc) + 5.09E3 * trb(ji,jj,jk,jppoc) ) 273 273 zaggdfea = zlam1a * zstep * zfecoll 274 274 #if defined key_kriest … … 278 278 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zscave * zdenom1 + zaggdfea + zaggdfeb 279 279 #else 280 zlam1b = 3.53E3 * tr n(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk)280 zlam1b = 3.53E3 * trb(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk) 281 281 zaggdfeb = zlam1b * zstep * zfecoll 282 282 ! … … 292 292 ! ---------------------------------------- 293 293 IF( ln_fechem ) THEN 294 biron(:,:,:) = MAX( 0., tr n(:,:,:,jpfer) - zFeP(:,:,:) * 1E-9 )294 biron(:,:,:) = MAX( 0., trb(:,:,:,jpfer) - zFeP(:,:,:) * 1E-9 ) 295 295 ELSE 296 biron(:,:,:) = tr n(:,:,:,jpfer)296 biron(:,:,:) = trb(:,:,:,jpfer) 297 297 ENDIF 298 298 299 299 ! Output of some diagnostics variables 300 300 ! --------------------------------- 301 IF( lk_iomput .AND. jnt == nrdttrc ) THEN301 IF( lk_iomput .AND. knt == nrdttrc ) THEN 302 302 IF( iom_use("Fe3") ) CALL iom_put("Fe3" , zFe3 (:,:,:) * tmask(:,:,:) ) ! Fe3+ 303 303 IF( iom_use("FeL1") ) CALL iom_put("FeL1" , zFeL1 (:,:,:) * tmask(:,:,:) ) ! FeL1 -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zflx.F90
r5215 r5385 68 68 CONTAINS 69 69 70 SUBROUTINE p4z_flx ( kt )70 SUBROUTINE p4z_flx ( kt, knt ) 71 71 !!--------------------------------------------------------------------- 72 72 !! *** ROUTINE p4z_flx *** … … 81 81 !!--------------------------------------------------------------------- 82 82 ! 83 INTEGER, INTENT(in) :: kt !83 INTEGER, INTENT(in) :: kt, knt ! 84 84 ! 85 85 INTEGER :: ji, jj, jm, iind, iindm1 … … 101 101 ! IS USED TO COMPUTE AIR-SEA FLUX OF CO2 102 102 103 IF( kt /= nit000 ) CALL p4z_patm( kt ) ! Get sea-level pressure (E&K [1981] climatology) for use in flux calcs103 IF( kt /= nit000 .AND. knt == 1 ) CALL p4z_patm( kt ) ! Get sea-level pressure (E&K [1981] climatology) for use in flux calcs 104 104 105 105 IF( ln_co2int ) THEN … … 130 130 zbot = borat(ji,jj,1) 131 131 zfact = rhop(ji,jj,1) / 1000. + rtrn 132 zdic = tr n(ji,jj,1,jpdic) / zfact132 zdic = trb(ji,jj,1,jpdic) / zfact 133 133 zph = MAX( hi(ji,jj,1), 1.e-10 ) / zfact 134 zalka = tr n(ji,jj,1,jptal) / zfact134 zalka = trb(ji,jj,1,jptal) / zfact 135 135 136 136 ! CALCULATE [ALK]([CO3--], [HCO3-]) … … 184 184 zfld = satmco2(ji,jj) * patm(ji,jj) * tmask(ji,jj,1) * chemc(ji,jj,1) * zkgco2(ji,jj) ! (mol/L) * (m/s) 185 185 zflu = zh2co3(ji,jj) * tmask(ji,jj,1) * zkgco2(ji,jj) ! (mol/L) (m/s) ? 186 oce_co2(ji,jj) = ( zfld - zflu ) * rfact * e1e2t(ji,jj) * tmask(ji,jj,1) * 1000.186 oce_co2(ji,jj) = ( zfld - zflu ) * rfact2 * e1e2t(ji,jj) * tmask(ji,jj,1) * 1000. 187 187 ! compute the trend 188 tra(ji,jj,1,jpdic) = tra(ji,jj,1,jpdic) + ( zfld - zflu ) / fse3t(ji,jj,1)188 tra(ji,jj,1,jpdic) = tra(ji,jj,1,jpdic) + ( zfld - zflu ) * rfact2 / fse3t(ji,jj,1) 189 189 190 190 ! Compute O2 flux 191 191 zfld16 = atcox * patm(ji,jj) * chemc(ji,jj,2) * tmask(ji,jj,1) * zkgo2(ji,jj) ! (mol/L) * (m/s) 192 zflu16 = tr n(ji,jj,1,jpoxy) * tmask(ji,jj,1) * zkgo2(ji,jj)192 zflu16 = trb(ji,jj,1,jpoxy) * tmask(ji,jj,1) * zkgo2(ji,jj) 193 193 zoflx(ji,jj) = zfld16 - zflu16 194 tra(ji,jj,1,jpoxy) = tra(ji,jj,1,jpoxy) + zoflx(ji,jj) / fse3t(ji,jj,1)194 tra(ji,jj,1,jpoxy) = tra(ji,jj,1,jpoxy) + zoflx(ji,jj) * rfact2 / fse3t(ji,jj,1) 195 195 END DO 196 196 END DO … … 207 207 ENDIF 208 208 209 IF( lk_iomput ) THEN209 IF( lk_iomput .AND. knt == nrdttrc ) THEN 210 210 CALL wrk_alloc( jpi, jpj, zw2d ) 211 211 IF( iom_use( "Cflx" ) ) THEN 212 zw2d(:,:) = oce_co2(:,:) / e1e2t(:,:) / rfact212 zw2d(:,:) = oce_co2(:,:) / e1e2t(:,:) * rfact2r 213 213 CALL iom_put( "Cflx" , zw2d ) 214 214 ENDIF … … 226 226 ENDIF 227 227 IF( iom_use( "Dpo2" ) ) THEN 228 zw2d(:,:) = ( atcox * patm(:,:) - tr n(:,:,1,jpoxy) / ( chemc(:,:,2) + rtrn ) ) * tmask(:,:,1)228 zw2d(:,:) = ( atcox * patm(:,:) - trb(:,:,1,jpoxy) / ( chemc(:,:,2) + rtrn ) ) * tmask(:,:,1) 229 229 CALL iom_put( "Dpo2" , zw2d ) 230 230 ENDIF … … 235 235 ELSE 236 236 IF( ln_diatrc ) THEN 237 trc2d(:,:,jp_pcs0_2d ) = oce_co2(:,:) / e1e2t(:,:) / rfact237 trc2d(:,:,jp_pcs0_2d ) = oce_co2(:,:) / e1e2t(:,:) * rfact2r 238 238 trc2d(:,:,jp_pcs0_2d + 1) = zoflx(:,:) * 1000 * tmask(:,:,1) 239 239 trc2d(:,:,jp_pcs0_2d + 2) = zkgco2(:,:) * tmask(:,:,1) -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zint.F90
r5215 r5385 56 56 DO ji = 1, jpi 57 57 DO jj = 1, jpj 58 zvar = tr n(ji,jj,1,jpsil) * trn(ji,jj,1,jpsil)58 zvar = trb(ji,jj,1,jpsil) * trb(ji,jj,1,jpsil) 59 59 xksimax(ji,jj) = MAX( xksimax(ji,jj), ( 1.+ 7.* zvar / ( xksilim * xksilim + zvar ) ) * 1e-6 ) 60 60 END DO -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlim.F90
r4996 r5385 62 62 CONTAINS 63 63 64 SUBROUTINE p4z_lim( kt, jnt )64 SUBROUTINE p4z_lim( kt, knt ) 65 65 !!--------------------------------------------------------------------- 66 66 !! *** ROUTINE p4z_lim *** … … 72 72 !!--------------------------------------------------------------------- 73 73 ! 74 INTEGER, INTENT(in) :: kt, jnt74 INTEGER, INTENT(in) :: kt, knt 75 75 ! 76 76 INTEGER :: ji, jj, jk 77 77 REAL(wp) :: zlim1, zlim2, zlim3, zlim4, zno3, zferlim 78 78 REAL(wp) :: zconcd, zconcd2, zconcn, zconcn2 79 REAL(wp) :: z1_tr ndia, z1_trnphy, ztem1, ztem2, zetot1, zetot279 REAL(wp) :: z1_trbdia, z1_trbphy, ztem1, ztem2, zetot1, zetot2 80 80 REAL(wp) :: zdenom, zratio, zironmin 81 81 REAL(wp) :: zconc1d, zconc1dnh4, zconc0n, zconc0nnh4 … … 90 90 ! Tuning of the iron concentration to a minimum level that is set to the detection limit 91 91 !------------------------------------- 92 zno3 = tr n(ji,jj,jk,jpno3) / 40.e-692 zno3 = trb(ji,jj,jk,jpno3) / 40.e-6 93 93 zferlim = MAX( 3e-11 * zno3 * zno3, 5e-12 ) 94 94 zferlim = MIN( zferlim, 7e-11 ) 95 tr n(ji,jj,jk,jpfer) = MAX( trn(ji,jj,jk,jpfer), zferlim )95 trb(ji,jj,jk,jpfer) = MAX( trb(ji,jj,jk,jpfer), zferlim ) 96 96 97 97 ! Computation of a variable Ks for iron on diatoms taking into account 98 98 ! that increasing biomass is made of generally bigger cells 99 99 !------------------------------------------------ 100 zconcd = MAX( 0.e0 , tr n(ji,jj,jk,jpdia) - xsizedia )101 zconcd2 = tr n(ji,jj,jk,jpdia) - zconcd102 zconcn = MAX( 0.e0 , tr n(ji,jj,jk,jpphy) - xsizephy )103 zconcn2 = tr n(ji,jj,jk,jpphy) - zconcn104 z1_tr nphy = 1. / ( trn(ji,jj,jk,jpphy) + rtrn )105 z1_tr ndia = 1. / ( trn(ji,jj,jk,jpdia) + rtrn )106 107 concdfe(ji,jj,jk) = MAX( concdfer, ( zconcd2 * concdfer + concdfer * xsizerd * zconcd ) * z1_tr ndia )108 zconc1d = MAX( concdno3, ( zconcd2 * concdno3 + concdno3 * xsizerd * zconcd ) * z1_tr ndia )109 zconc1dnh4 = MAX( concdnh4, ( zconcd2 * concdnh4 + concdnh4 * xsizerd * zconcd ) * z1_tr ndia )110 111 concnfe(ji,jj,jk) = MAX( concnfer, ( zconcn2 * concnfer + concnfer * xsizern * zconcn ) * z1_tr nphy )112 zconc0n = MAX( concnno3, ( zconcn2 * concnno3 + concnno3 * xsizern * zconcn ) * z1_tr nphy )113 zconc0nnh4 = MAX( concnnh4, ( zconcn2 * concnnh4 + concnnh4 * xsizern * zconcn ) * z1_tr nphy )100 zconcd = MAX( 0.e0 , trb(ji,jj,jk,jpdia) - xsizedia ) 101 zconcd2 = trb(ji,jj,jk,jpdia) - zconcd 102 zconcn = MAX( 0.e0 , trb(ji,jj,jk,jpphy) - xsizephy ) 103 zconcn2 = trb(ji,jj,jk,jpphy) - zconcn 104 z1_trbphy = 1. / ( trb(ji,jj,jk,jpphy) + rtrn ) 105 z1_trbdia = 1. / ( trb(ji,jj,jk,jpdia) + rtrn ) 106 107 concdfe(ji,jj,jk) = MAX( concdfer, ( zconcd2 * concdfer + concdfer * xsizerd * zconcd ) * z1_trbdia ) 108 zconc1d = MAX( concdno3, ( zconcd2 * concdno3 + concdno3 * xsizerd * zconcd ) * z1_trbdia ) 109 zconc1dnh4 = MAX( concdnh4, ( zconcd2 * concdnh4 + concdnh4 * xsizerd * zconcd ) * z1_trbdia ) 110 111 concnfe(ji,jj,jk) = MAX( concnfer, ( zconcn2 * concnfer + concnfer * xsizern * zconcn ) * z1_trbphy ) 112 zconc0n = MAX( concnno3, ( zconcn2 * concnno3 + concnno3 * xsizern * zconcn ) * z1_trbphy ) 113 zconc0nnh4 = MAX( concnnh4, ( zconcn2 * concnnh4 + concnnh4 * xsizern * zconcn ) * z1_trbphy ) 114 114 115 115 ! Michaelis-Menten Limitation term for nutrients Small bacteria 116 116 ! ------------------------------------------------------------- 117 zdenom = 1. / ( concbno3 * concbnh4 + concbnh4 * tr n(ji,jj,jk,jpno3) + concbno3 * trn(ji,jj,jk,jpnh4) )118 xnanono3(ji,jj,jk) = tr n(ji,jj,jk,jpno3) * concbnh4 * zdenom119 xnanonh4(ji,jj,jk) = tr n(ji,jj,jk,jpnh4) * concbno3 * zdenom117 zdenom = 1. / ( concbno3 * concbnh4 + concbnh4 * trb(ji,jj,jk,jpno3) + concbno3 * trb(ji,jj,jk,jpnh4) ) 118 xnanono3(ji,jj,jk) = trb(ji,jj,jk,jpno3) * concbnh4 * zdenom 119 xnanonh4(ji,jj,jk) = trb(ji,jj,jk,jpnh4) * concbno3 * zdenom 120 120 ! 121 121 zlim1 = xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) 122 zlim2 = tr n(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + concbnh4 )123 zlim3 = tr n(ji,jj,jk,jpfer) / ( concbfe + trn(ji,jj,jk,jpfer) )124 zlim4 = tr n(ji,jj,jk,jpdoc) / ( xkdoc + trn(ji,jj,jk,jpdoc) )122 zlim2 = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + concbnh4 ) 123 zlim3 = trb(ji,jj,jk,jpfer) / ( concbfe + trb(ji,jj,jk,jpfer) ) 124 zlim4 = trb(ji,jj,jk,jpdoc) / ( xkdoc + trb(ji,jj,jk,jpdoc) ) 125 125 xlimbacl(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 126 126 xlimbac (ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) * zlim4 … … 128 128 ! Michaelis-Menten Limitation term for nutrients Small flagellates 129 129 ! ----------------------------------------------- 130 zdenom = 1. / ( zconc0n * zconc0nnh4 + zconc0nnh4 * tr n(ji,jj,jk,jpno3) + zconc0n * trn(ji,jj,jk,jpnh4) )131 xnanono3(ji,jj,jk) = tr n(ji,jj,jk,jpno3) * zconc0nnh4 * zdenom132 xnanonh4(ji,jj,jk) = tr n(ji,jj,jk,jpnh4) * zconc0n * zdenom130 zdenom = 1. / ( zconc0n * zconc0nnh4 + zconc0nnh4 * trb(ji,jj,jk,jpno3) + zconc0n * trb(ji,jj,jk,jpnh4) ) 131 xnanono3(ji,jj,jk) = trb(ji,jj,jk,jpno3) * zconc0nnh4 * zdenom 132 xnanonh4(ji,jj,jk) = trb(ji,jj,jk,jpnh4) * zconc0n * zdenom 133 133 ! 134 134 zlim1 = xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) 135 zlim2 = tr n(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + zconc0nnh4 )136 zratio = tr n(ji,jj,jk,jpnfe) * z1_trnphy137 zironmin = xcoef1 * tr n(ji,jj,jk,jpnch) * z1_trnphy + xcoef2 * zlim1 + xcoef3 * xnanono3(ji,jj,jk)135 zlim2 = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zconc0nnh4 ) 136 zratio = trb(ji,jj,jk,jpnfe) * z1_trbphy 137 zironmin = xcoef1 * trb(ji,jj,jk,jpnch) * z1_trbphy + xcoef2 * zlim1 + xcoef3 * xnanono3(ji,jj,jk) 138 138 zlim3 = MAX( 0.,( zratio - zironmin ) / qnfelim ) 139 139 xnanopo4(ji,jj,jk) = zlim2 … … 143 143 ! Michaelis-Menten Limitation term for nutrients Diatoms 144 144 ! ---------------------------------------------- 145 zdenom = 1. / ( zconc1d * zconc1dnh4 + zconc1dnh4 * tr n(ji,jj,jk,jpno3) + zconc1d * trn(ji,jj,jk,jpnh4) )146 xdiatno3(ji,jj,jk) = tr n(ji,jj,jk,jpno3) * zconc1dnh4 * zdenom147 xdiatnh4(ji,jj,jk) = tr n(ji,jj,jk,jpnh4) * zconc1d * zdenom145 zdenom = 1. / ( zconc1d * zconc1dnh4 + zconc1dnh4 * trb(ji,jj,jk,jpno3) + zconc1d * trb(ji,jj,jk,jpnh4) ) 146 xdiatno3(ji,jj,jk) = trb(ji,jj,jk,jpno3) * zconc1dnh4 * zdenom 147 xdiatnh4(ji,jj,jk) = trb(ji,jj,jk,jpnh4) * zconc1d * zdenom 148 148 ! 149 149 zlim1 = xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) 150 zlim2 = tr n(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + zconc1dnh4 )151 zlim3 = tr n(ji,jj,jk,jpsil) / ( trn(ji,jj,jk,jpsil) + xksi(ji,jj) )152 zratio = tr n(ji,jj,jk,jpdfe) * z1_trndia153 zironmin = xcoef1 * tr n(ji,jj,jk,jpdch) * z1_trndia + xcoef2 * zlim1 + xcoef3 * xdiatno3(ji,jj,jk)150 zlim2 = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zconc1dnh4 ) 151 zlim3 = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi(ji,jj) ) 152 zratio = trb(ji,jj,jk,jpdfe) * z1_trbdia 153 zironmin = xcoef1 * trb(ji,jj,jk,jpdch) * z1_trbdia + xcoef2 * zlim1 + xcoef3 * xdiatno3(ji,jj,jk) 154 154 zlim4 = MAX( 0., ( zratio - zironmin ) / qdfelim ) 155 155 xdiatpo4(ji,jj,jk) = zlim2 … … 166 166 DO jj = 1, jpj 167 167 DO ji = 1, jpi 168 zlim1 = ( tr n(ji,jj,jk,jpno3) * concnnh4 + trn(ji,jj,jk,jpnh4) * concnno3 ) &169 & / ( concnno3 * concnnh4 + concnnh4 * tr n(ji,jj,jk,jpno3) + concnno3 * trn(ji,jj,jk,jpnh4) )170 zlim2 = tr n(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + concnnh4 )171 zlim3 = tr n(ji,jj,jk,jpfer) / ( trn(ji,jj,jk,jpfer) + 5.E-11 )168 zlim1 = ( trb(ji,jj,jk,jpno3) * concnnh4 + trb(ji,jj,jk,jpnh4) * concnno3 ) & 169 & / ( concnno3 * concnnh4 + concnnh4 * trb(ji,jj,jk,jpno3) + concnno3 * trb(ji,jj,jk,jpnh4) ) 170 zlim2 = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + concnnh4 ) 171 zlim3 = trb(ji,jj,jk,jpfer) / ( trb(ji,jj,jk,jpfer) + 5.E-11 ) 172 172 ztem1 = MAX( 0., tsn(ji,jj,jk,jp_tem) ) 173 173 ztem2 = tsn(ji,jj,jk,jp_tem) - 10. 174 zetot1 = MAX( 0., etot (ji,jj,jk) - 1.) / ( 4. + etot(ji,jj,jk) )175 zetot2 = 30. / ( 30. + etot (ji,jj,jk) )174 zetot1 = MAX( 0., etot_ndcy(ji,jj,jk) - 1.) / ( 4. + etot_ndcy(ji,jj,jk) ) 175 zetot2 = 30. / ( 30. + etot_ndcy(ji,jj,jk) ) 176 176 177 177 xfracal(ji,jj,jk) = caco3r * MIN( zlim1, zlim2, zlim3 ) & 178 178 & * ztem1 / ( 0.1 + ztem1 ) & 179 & * MAX( 1., tr n(ji,jj,jk,jpphy) * 1.e6 / 2. ) &179 & * MAX( 1., trb(ji,jj,jk,jpphy) * 1.e6 / 2. ) & 180 180 & * zetot1 * zetot2 & 181 181 & * ( 1. + EXP(-ztem2 * ztem2 / 25. ) ) & … … 188 188 ! 189 189 ! 190 IF( lk_iomput .AND. jnt == nrdttrc ) THEN ! save output diagnostics190 IF( lk_iomput .AND. knt == nrdttrc ) THEN ! save output diagnostics 191 191 IF( iom_use( "xfracal" ) ) CALL iom_put( "xfracal", xfracal(:,:,:) * tmask(:,:,:) ) ! euphotic layer deptht 192 192 IF( iom_use( "LNnut" ) ) CALL iom_put( "LNnut" , xlimphy(:,:,:) * tmask(:,:,:) ) ! Nutrient limitation term -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlys.F90
r4996 r5385 48 48 CONTAINS 49 49 50 SUBROUTINE p4z_lys( kt )50 SUBROUTINE p4z_lys( kt, knt ) 51 51 !!--------------------------------------------------------------------- 52 52 !! *** ROUTINE p4z_lys *** … … 59 59 !!--------------------------------------------------------------------- 60 60 ! 61 INTEGER, INTENT(in) :: kt ! ocean time step61 INTEGER, INTENT(in) :: kt, knt ! ocean time step 62 62 INTEGER :: ji, jj, jk, jn 63 63 REAL(wp) :: zalk, zdic, zph, zah2 64 64 REAL(wp) :: zdispot, zfact, zcalcon, zalka, zaldi 65 65 REAL(wp) :: zomegaca, zexcess, zexcess0 66 REAL(wp) :: zrfact267 66 CHARACTER (len=25) :: charout 68 67 REAL(wp), POINTER, DIMENSION(:,:,:) :: zco3, zcaldiss … … 89 88 zfact = rhop(ji,jj,jk) / 1000. + rtrn 90 89 zph = hi(ji,jj,jk) * tmask(ji,jj,jk) / zfact + ( 1.-tmask(ji,jj,jk) ) * 1.e-9 ! [H+] 91 zdic = tr n(ji,jj,jk,jpdic) / zfact92 zalka = tr n(ji,jj,jk,jptal) / zfact90 zdic = trb(ji,jj,jk,jpdic) / zfact 91 zalka = trb(ji,jj,jk,jptal) / zfact 93 92 ! CALCULATE [ALK]([CO3--], [HCO3-]) 94 93 zalk = zalka - ( akw3(ji,jj,jk) / zph - zph + borat(ji,jj,jk) / ( 1. + zph / akb3(ji,jj,jk) ) ) … … 130 129 ! (ACCORDING TO THIS FORMULATION ALSO SOME PARTICULATE 131 130 ! CACO3 GETS DISSOLVED EVEN IN THE CASE OF OVERSATURATION) 132 zdispot = kdca * zexcess * tr n(ji,jj,jk,jpcal)131 zdispot = kdca * zexcess * trb(ji,jj,jk,jpcal) 133 132 # if defined key_degrad 134 133 zdispot = zdispot * facvol(ji,jj,jk) … … 136 135 ! CHANGE OF [CO3--] , [ALK], PARTICULATE [CACO3], 137 136 ! AND [SUM(CO2)] DUE TO CACO3 DISSOLUTION/PRECIPITATION 138 zcaldiss(ji,jj,jk) = zdispot / rmtss! calcite dissolution139 zco3(ji,jj,jk) = zco3(ji,jj,jk) + zcaldiss(ji,jj,jk) * rfact137 zcaldiss(ji,jj,jk) = zdispot * rfact2 / rmtss ! calcite dissolution 138 zco3(ji,jj,jk) = zco3(ji,jj,jk) + zcaldiss(ji,jj,jk) 140 139 ! 141 140 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + 2. * zcaldiss(ji,jj,jk) … … 147 146 ! 148 147 149 IF( lk_iomput ) THEN148 IF( lk_iomput .AND. knt == nrdttrc ) THEN 150 149 IF( iom_use( "PH" ) ) CALL iom_put( "PH" , -1. * LOG10( hi(:,:,:) ) * tmask(:,:,:) ) 151 150 IF( iom_use( "CO3" ) ) CALL iom_put( "CO3" , zco3(:,:,:) * 1.e+3 * tmask(:,:,:) ) 152 151 IF( iom_use( "CO3sat" ) ) CALL iom_put( "CO3sat", aksp(:,:,:) * 1.e+3 / calcon * tmask(:,:,:) ) 153 IF( iom_use( "DCAL" ) ) CALL iom_put( "DCAL" , zcaldiss(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) )152 IF( iom_use( "DCAL" ) ) CALL iom_put( "DCAL" , zcaldiss(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ) 154 153 ELSE 155 154 trc3d(:,:,:,jp_pcs0_3d ) = -1. * LOG10( hi(:,:,:) ) * tmask(:,:,:) -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmeso.F90
r4996 r5385 60 60 CONTAINS 61 61 62 SUBROUTINE p4z_meso( kt, jnt )62 SUBROUTINE p4z_meso( kt, knt ) 63 63 !!--------------------------------------------------------------------- 64 64 !! *** ROUTINE p4z_meso *** … … 68 68 !! ** Method : - ??? 69 69 !!--------------------------------------------------------------------- 70 INTEGER, INTENT(in) :: kt, jnt ! ocean time step70 INTEGER, INTENT(in) :: kt, knt ! ocean time step 71 71 INTEGER :: ji, jj, jk 72 72 REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz, zcompam … … 97 97 DO jj = 1, jpj 98 98 DO ji = 1, jpi 99 zcompam = MAX( ( tr n(ji,jj,jk,jpmes) - 1.e-9 ), 0.e0 )99 zcompam = MAX( ( trb(ji,jj,jk,jpmes) - 1.e-9 ), 0.e0 ) 100 100 # if defined key_degrad 101 101 zstep = xstep * facvol(ji,jj,jk) … … 107 107 ! Respiration rates of both zooplankton 108 108 ! ------------------------------------- 109 zrespz2 = resrat2 * zfact * tr n(ji,jj,jk,jpmes) / ( xkmort + trn(ji,jj,jk,jpmes) ) &109 zrespz2 = resrat2 * zfact * trb(ji,jj,jk,jpmes) / ( xkmort + trb(ji,jj,jk,jpmes) ) & 110 110 & + resrat2 * zfact * 3. * nitrfac(ji,jj,jk) 111 111 … … 113 113 ! no real reason except that it seems to be more stable and may mimic predation 114 114 ! --------------------------------------------------------------- 115 ztortz2 = mzrat2 * 1.e6 * zfact * tr n(ji,jj,jk,jpmes)115 ztortz2 = mzrat2 * 1.e6 * zfact * trb(ji,jj,jk,jpmes) 116 116 ! 117 zcompadi = MAX( ( tr n(ji,jj,jk,jpdia) - xthresh2dia ), 0.e0 )118 zcompaz = MAX( ( tr n(ji,jj,jk,jpzoo) - xthresh2zoo ), 0.e0 )117 zcompadi = MAX( ( trb(ji,jj,jk,jpdia) - xthresh2dia ), 0.e0 ) 118 zcompaz = MAX( ( trb(ji,jj,jk,jpzoo) - xthresh2zoo ), 0.e0 ) 119 119 ! Size effect of nanophytoplankton on grazing : the smaller it is, the less prone 120 120 ! it is to predation by mesozooplankton 121 121 ! ------------------------------------------------------------------------------- 122 zcompaph = MAX( ( tr n(ji,jj,jk,jpphy) - xthresh2phy ), 0.e0 ) &122 zcompaph = MAX( ( trb(ji,jj,jk,jpphy) - xthresh2phy ), 0.e0 ) & 123 123 & * MIN(1., MAX( 0., ( quotan(ji,jj,jk) - 0.2) / 0.3 ) ) 124 zcompapoc = MAX( ( tr n(ji,jj,jk,jppoc) - xthresh2poc ), 0.e0 )124 zcompapoc = MAX( ( trb(ji,jj,jk,jppoc) - xthresh2poc ), 0.e0 ) 125 125 126 126 zfood = xprefc * zcompadi + xprefz * zcompaz + xprefp * zcompaph + xprefpoc * zcompapoc … … 128 128 zdenom = zfoodlim / ( xkgraz2 + zfoodlim ) 129 129 zdenom2 = zdenom / ( zfood + rtrn ) 130 zgraze2 = grazrat2 * zstep * tgfunc2(ji,jj,jk) * tr n(ji,jj,jk,jpmes)130 zgraze2 = grazrat2 * zstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpmes) 131 131 132 132 zgrazd = zgraze2 * xprefc * zcompadi * zdenom2 … … 135 135 zgrazpoc = zgraze2 * xprefpoc * zcompapoc * zdenom2 136 136 137 zgraznf = zgrazn * tr n(ji,jj,jk,jpnfe) / ( trn(ji,jj,jk,jpphy) + rtrn)138 zgrazf = zgrazd * tr n(ji,jj,jk,jpdfe) / ( trn(ji,jj,jk,jpdia) + rtrn)139 zgrazpof = zgrazpoc * tr n(ji,jj,jk,jpsfe) / ( trn(ji,jj,jk,jppoc) + rtrn)137 zgraznf = zgrazn * trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) + rtrn) 138 zgrazf = zgrazd * trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) + rtrn) 139 zgrazpof = zgrazpoc * trb(ji,jj,jk,jpsfe) / ( trb(ji,jj,jk,jppoc) + rtrn) 140 140 141 141 ! Mesozooplankton flux feeding on GOC … … 144 144 # if ! defined key_kriest 145 145 zgrazffeg = grazflux * zstep * wsbio4(ji,jj,jk) & 146 & * tgfunc2(ji,jj,jk) * tr n(ji,jj,jk,jpgoc) * trn(ji,jj,jk,jpmes)147 zgrazfffg = zgrazffeg * tr n(ji,jj,jk,jpbfe) / (trn(ji,jj,jk,jpgoc) + rtrn)146 & * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes) 147 zgrazfffg = zgrazffeg * trb(ji,jj,jk,jpbfe) / (trb(ji,jj,jk,jpgoc) + rtrn) 148 148 # endif 149 149 zgrazffep = grazflux * zstep * wsbio3(ji,jj,jk) & 150 & * tgfunc2(ji,jj,jk) * tr n(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpmes)151 zgrazfffp = zgrazffep * tr n(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn)150 & * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpmes) 151 zgrazfffp = zgrazffep * trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn) 152 152 ! 153 153 # if ! defined key_kriest … … 158 158 ! diatoms based aggregates are more prone to fractionation 159 159 ! since they are more porous (marine snow instead of fecal pellets) 160 zratio = tr n(ji,jj,jk,jpgsi) / ( trn(ji,jj,jk,jpgoc) + rtrn )160 zratio = trb(ji,jj,jk,jpgsi) / ( trb(ji,jj,jk,jpgoc) + rtrn ) 161 161 zratio2 = zratio * zratio 162 162 zfrac = zproport * grazflux * zstep * wsbio4(ji,jj,jk) & 163 & * tr n(ji,jj,jk,jpgoc) * trn(ji,jj,jk,jpmes) &163 & * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes) & 164 164 & * ( 0.2 + 3.8 * zratio2 / ( 1.**2 + zratio2 ) ) 165 zfracfe = zfrac * tr n(ji,jj,jk,jpbfe) / (trn(ji,jj,jk,jpgoc) + rtrn)165 zfracfe = zfrac * trb(ji,jj,jk,jpbfe) / (trb(ji,jj,jk,jpgoc) + rtrn) 166 166 167 167 zgrazffep = zproport * zgrazffep … … 215 215 tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) - zgrazz 216 216 tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgrazn 217 tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgrazn * tr n(ji,jj,jk,jpnch) / ( trn(ji,jj,jk,jpphy) + rtrn )218 tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazd * tr n(ji,jj,jk,jpdch) / ( trn(ji,jj,jk,jpdia) + rtrn )219 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazd * tr n(ji,jj,jk,jpdsi) / ( trn(ji,jj,jk,jpdia) + rtrn )220 tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazd * tr n(ji,jj,jk,jpdsi) / ( trn(ji,jj,jk,jpdia) + rtrn )217 tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgrazn * trb(ji,jj,jk,jpnch) / ( trb(ji,jj,jk,jpphy) + rtrn ) 218 tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazd * trb(ji,jj,jk,jpdch) / ( trb(ji,jj,jk,jpdia) + rtrn ) 219 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazd * trb(ji,jj,jk,jpdsi) / ( trb(ji,jj,jk,jpdia) + rtrn ) 220 tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazd * trb(ji,jj,jk,jpdsi) / ( trb(ji,jj,jk,jpdia) + rtrn ) 221 221 tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zgraznf 222 222 tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazf … … 231 231 tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) + zprcaca 232 232 #if defined key_kriest 233 znumpoc = tr n(ji,jj,jk,jpnum) / ( trn(ji,jj,jk,jppoc) + rtrn )233 znumpoc = trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn ) 234 234 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortzgoc - zgrazpoc - zgrazffep + zgrapoc2 235 235 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) - zgrazpoc * znumpoc + zgrapoc2 * xkr_dmeso & … … 248 248 END DO 249 249 ! 250 IF( lk_iomput .AND. jnt == nrdttrc ) THEN250 IF( lk_iomput .AND. knt == nrdttrc ) THEN 251 251 CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 252 252 IF( iom_use( "GRAZ2" ) ) THEN -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmicro.F90
r4996 r5385 59 59 CONTAINS 60 60 61 SUBROUTINE p4z_micro( kt, jnt )61 SUBROUTINE p4z_micro( kt, knt ) 62 62 !!--------------------------------------------------------------------- 63 63 !! *** ROUTINE p4z_micro *** … … 68 68 !!--------------------------------------------------------------------- 69 69 INTEGER, INTENT(in) :: kt ! ocean time step 70 INTEGER, INTENT(in) :: jnt70 INTEGER, INTENT(in) :: knt 71 71 ! 72 72 INTEGER :: ji, jj, jk … … 90 90 DO jj = 1, jpj 91 91 DO ji = 1, jpi 92 zcompaz = MAX( ( tr n(ji,jj,jk,jpzoo) - 1.e-9 ), 0.e0 )92 zcompaz = MAX( ( trb(ji,jj,jk,jpzoo) - 1.e-9 ), 0.e0 ) 93 93 zstep = xstep 94 94 # if defined key_degrad … … 99 99 ! Respiration rates of both zooplankton 100 100 ! ------------------------------------- 101 zrespz = resrat * zfact * tr n(ji,jj,jk,jpzoo) / ( xkmort + trn(ji,jj,jk,jpzoo) ) &101 zrespz = resrat * zfact * trb(ji,jj,jk,jpzoo) / ( xkmort + trb(ji,jj,jk,jpzoo) ) & 102 102 & + resrat * zfact * 3. * nitrfac(ji,jj,jk) 103 103 … … 105 105 ! no real reason except that it seems to be more stable and may mimic predation. 106 106 ! --------------------------------------------------------------- 107 ztortz = mzrat * 1.e6 * zfact * tr n(ji,jj,jk,jpzoo)108 109 zcompadi = MIN( MAX( ( tr n(ji,jj,jk,jpdia) - xthreshdia ), 0.e0 ), xsizedia )110 zcompaph = MAX( ( tr n(ji,jj,jk,jpphy) - xthreshphy ), 0.e0 )111 zcompapoc = MAX( ( tr n(ji,jj,jk,jppoc) - xthreshpoc ), 0.e0 )107 ztortz = mzrat * 1.e6 * zfact * trb(ji,jj,jk,jpzoo) 108 109 zcompadi = MIN( MAX( ( trb(ji,jj,jk,jpdia) - xthreshdia ), 0.e0 ), xsizedia ) 110 zcompaph = MAX( ( trb(ji,jj,jk,jpphy) - xthreshphy ), 0.e0 ) 111 zcompapoc = MAX( ( trb(ji,jj,jk,jppoc) - xthreshpoc ), 0.e0 ) 112 112 113 113 ! Microzooplankton grazing … … 117 117 zdenom = zfoodlim / ( xkgraz + zfoodlim ) 118 118 zdenom2 = zdenom / ( zfood + rtrn ) 119 zgraze = grazrat * zstep * tgfunc2(ji,jj,jk) * tr n(ji,jj,jk,jpzoo)119 zgraze = grazrat * zstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpzoo) 120 120 121 121 zgrazp = zgraze * xpref2p * zcompaph * zdenom2 … … 123 123 zgrazsd = zgraze * xpref2d * zcompadi * zdenom2 124 124 125 zgrazpf = zgrazp * tr n(ji,jj,jk,jpnfe) / (trn(ji,jj,jk,jpphy) + rtrn)126 zgrazmf = zgrazm * tr n(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn)127 zgrazsf = zgrazsd * tr n(ji,jj,jk,jpdfe) / (trn(ji,jj,jk,jpdia) + rtrn)125 zgrazpf = zgrazp * trb(ji,jj,jk,jpnfe) / (trb(ji,jj,jk,jpphy) + rtrn) 126 zgrazmf = zgrazm * trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn) 127 zgrazsf = zgrazsd * trb(ji,jj,jk,jpdfe) / (trb(ji,jj,jk,jpdia) + rtrn) 128 128 ! 129 129 zgraztot = zgrazp + zgrazm + zgrazsd … … 165 165 tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgrazp 166 166 tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zgrazsd 167 tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgrazp * tr n(ji,jj,jk,jpnch)/(trn(ji,jj,jk,jpphy)+rtrn)168 tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazsd * tr n(ji,jj,jk,jpdch)/(trn(ji,jj,jk,jpdia)+rtrn)169 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazsd * tr n(ji,jj,jk,jpdsi)/(trn(ji,jj,jk,jpdia)+rtrn)170 tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazsd * tr n(ji,jj,jk,jpdsi)/(trn(ji,jj,jk,jpdia)+rtrn)167 tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgrazp * trb(ji,jj,jk,jpnch)/(trb(ji,jj,jk,jpphy)+rtrn) 168 tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazsd * trb(ji,jj,jk,jpdch)/(trb(ji,jj,jk,jpdia)+rtrn) 169 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazsd * trb(ji,jj,jk,jpdsi)/(trb(ji,jj,jk,jpdia)+rtrn) 170 tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazsd * trb(ji,jj,jk,jpdsi)/(trb(ji,jj,jk,jpdia)+rtrn) 171 171 tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zgrazpf 172 172 tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazsf … … 184 184 #if defined key_kriest 185 185 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zmortz * xkr_dmicro & 186 - zgrazm * tr n(ji,jj,jk,jpnum) / ( trn(ji,jj,jk,jppoc) + rtrn )186 - zgrazm * trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn ) 187 187 #endif 188 188 END DO … … 190 190 END DO 191 191 ! 192 IF( lk_iomput .AND. jnt == nrdttrc ) THEN192 IF( lk_iomput .AND. knt == nrdttrc ) THEN 193 193 CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 194 194 IF( iom_use( "GRAZ1" ) ) THEN -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmort.F90
r5215 r5385 85 85 DO jj = 1, jpj 86 86 DO ji = 1, jpi 87 zcompaph = MAX( ( tr n(ji,jj,jk,jpphy) - 1e-8 ), 0.e0 )87 zcompaph = MAX( ( trb(ji,jj,jk,jpphy) - 1e-8 ), 0.e0 ) 88 88 zstep = xstep 89 89 # if defined key_degrad … … 94 94 ! due to turbulence is negligible. Mortality is also set 95 95 ! to 0 96 zsizerat = MIN(1., MAX( 0., (quotan(ji,jj,jk) - 0.2) / 0.3) ) * tr n(ji,jj,jk,jpphy)96 zsizerat = MIN(1., MAX( 0., (quotan(ji,jj,jk) - 0.2) / 0.3) ) * trb(ji,jj,jk,jpphy) 97 97 ! Squared mortality of Phyto similar to a sedimentation term during 98 98 ! blooms (Doney et al. 1996) … … 102 102 ! increased when nutrients are limiting phytoplankton growth 103 103 ! as observed for instance in case of iron limitation. 104 ztortp = mprat * xstep * zcompaph / ( xkmort + tr n(ji,jj,jk,jpphy) ) * zsizerat104 ztortp = mprat * xstep * zcompaph / ( xkmort + trb(ji,jj,jk,jpphy) ) * zsizerat 105 105 106 106 zmortp = zrespp + ztortp … … 108 108 ! Update the arrays TRA which contains the biological sources and sinks 109 109 110 zfactfe = tr n(ji,jj,jk,jpnfe)/(trn(ji,jj,jk,jpphy)+rtrn)111 zfactch = tr n(ji,jj,jk,jpnch)/(trn(ji,jj,jk,jpphy)+rtrn)110 zfactfe = trb(ji,jj,jk,jpnfe)/(trb(ji,jj,jk,jpphy)+rtrn) 111 zfactch = trb(ji,jj,jk,jpnch)/(trb(ji,jj,jk,jpphy)+rtrn) 112 112 tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zmortp 113 113 tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zmortp * zfactch … … 172 172 DO ji = 1, jpi 173 173 174 zcompadi = MAX( ( tr n(ji,jj,jk,jpdia) - 1e-9), 0. )174 zcompadi = MAX( ( trb(ji,jj,jk,jpdia) - 1e-9), 0. ) 175 175 176 176 ! Aggregation term for diatoms is increased in case of nutrient … … 186 186 zlim2 = xlimdia(ji,jj,jk) * xlimdia(ji,jj,jk) 187 187 zlim1 = 0.25 * ( 1. - zlim2 ) / ( 0.25 + zlim2 ) 188 zrespp2 = 1.e6 * zstep * ( wchld + wchldm * zlim1 ) * xdiss(ji,jj,jk) * zcompadi * tr n(ji,jj,jk,jpdia)188 zrespp2 = 1.e6 * zstep * ( wchld + wchldm * zlim1 ) * xdiss(ji,jj,jk) * zcompadi * trb(ji,jj,jk,jpdia) 189 189 190 190 ! Phytoplankton mortality. 191 191 ! ------------------------ 192 ztortp2 = mprat2 * zstep * tr n(ji,jj,jk,jpdia) / ( xkmort + trn(ji,jj,jk,jpdia) ) * zcompadi192 ztortp2 = mprat2 * zstep * trb(ji,jj,jk,jpdia) / ( xkmort + trb(ji,jj,jk,jpdia) ) * zcompadi 193 193 194 194 zmortp2 = zrespp2 + ztortp2 … … 196 196 ! Update the arrays tra which contains the biological sources and sinks 197 197 ! --------------------------------------------------------------------- 198 zfactch = tr n(ji,jj,jk,jpdch) / ( trn(ji,jj,jk,jpdia) + rtrn )199 zfactfe = tr n(ji,jj,jk,jpdfe) / ( trn(ji,jj,jk,jpdia) + rtrn )200 zfactsi = tr n(ji,jj,jk,jpdsi) / ( trn(ji,jj,jk,jpdia) + rtrn )198 zfactch = trb(ji,jj,jk,jpdch) / ( trb(ji,jj,jk,jpdia) + rtrn ) 199 zfactfe = trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) + rtrn ) 200 zfactsi = trb(ji,jj,jk,jpdsi) / ( trb(ji,jj,jk,jpdia) + rtrn ) 201 201 tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zmortp2 202 202 tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zmortp2 * zfactch -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zopt.F90
r4996 r5385 35 35 REAL(wp) :: parlux !: Fraction of shortwave as PAR 36 36 REAL(wp) :: xparsw !: parlux/3 37 REAL(wp) :: xsi0r !: 1. /rn_si0 37 38 38 39 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_par ! structure of input par … … 42 43 43 44 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: enano, ediat !: PAR for phyto, nano and diat 45 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: etot_ndcy !: PAR over 24h in case of diurnal cycle 44 46 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: emoy !: averaged PAR in the mixed layer 47 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ekb, ekg, ekr !: wavelength (Red-Green-Blue) 45 48 46 49 INTEGER :: nksrp ! levels below which the light cannot penetrate ( depth larger than 391 m) … … 57 60 CONTAINS 58 61 59 SUBROUTINE p4z_opt( kt, jnt )62 SUBROUTINE p4z_opt( kt, knt ) 60 63 !!--------------------------------------------------------------------- 61 64 !! *** ROUTINE p4z_opt *** … … 67 70 !!--------------------------------------------------------------------- 68 71 ! 69 INTEGER, INTENT(in) :: kt, jnt ! ocean time step72 INTEGER, INTENT(in) :: kt, knt ! ocean time step 70 73 ! 71 74 INTEGER :: ji, jj, jk 72 75 INTEGER :: irgb 73 REAL(wp) :: zchl , zxsi0r76 REAL(wp) :: zchl 74 77 REAL(wp) :: zc0 , zc1 , zc2, zc3, z1_dep 75 REAL(wp), POINTER, DIMENSION(:,: ) :: zdepmoy, zetmp , zetmp1, zetmp276 REAL(wp), POINTER, DIMENSION(:,:,:) :: z ekg, zekr, zekb, ze0, ze1, ze2, ze378 REAL(wp), POINTER, DIMENSION(:,: ) :: zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4, zqsr100 79 REAL(wp), POINTER, DIMENSION(:,:,:) :: zpar, ze0, ze1, ze2, ze3 77 80 !!--------------------------------------------------------------------- 78 81 ! … … 80 83 ! 81 84 ! Allocate temporary workspace 82 CALL wrk_alloc( jpi, jpj, z depmoy, zetmp, zetmp1, zetmp2 )83 CALL wrk_alloc( jpi, jpj, jpk, z ekg, zekr, zekb, ze0, ze1, ze2, ze3 )84 85 IF( jnt == 1 .AND. ln_varpar ) CALL p4z_optsbc( kt )85 CALL wrk_alloc( jpi, jpj, zqsr100, zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4 ) 86 CALL wrk_alloc( jpi, jpj, jpk, zpar, ze0, ze1, ze2, ze3 ) 87 88 IF( knt == 1 .AND. ln_varpar ) CALL p4z_opt_sbc( kt ) 86 89 87 90 ! Initialisation of variables used to compute PAR 88 91 ! ----------------------------------------------- 89 ze1(:,:,jpk) = 0._wp 90 ze2(:,:,jpk) = 0._wp 91 ze3(:,:,jpk) = 0._wp 92 92 ze1(:,:,:) = 0._wp 93 ze2(:,:,:) = 0._wp 94 ze3(:,:,:) = 0._wp 93 95 ! !* attenuation coef. function of Chlorophyll and wavelength (Red-Green-Blue) 94 96 DO jk = 1, jpkm1 ! -------------------------------------------------------- … … 97 99 !CDIR NOVERRCHK 98 100 DO ji = 1, jpi 99 zchl = ( tr n(ji,jj,jk,jpnch) + trn(ji,jj,jk,jpdch) + rtrn ) * 1.e6101 zchl = ( trb(ji,jj,jk,jpnch) + trb(ji,jj,jk,jpdch) + rtrn ) * 1.e6 100 102 zchl = MIN( 10. , MAX( 0.05, zchl ) ) 101 103 irgb = NINT( 41 + 20.* LOG10( zchl ) + rtrn ) 102 104 ! 103 zekb(ji,jj,jk) = xkrgb(1,irgb) * fse3t(ji,jj,jk)104 zekg(ji,jj,jk) = xkrgb(2,irgb) * fse3t(ji,jj,jk)105 zekr(ji,jj,jk) = xkrgb(3,irgb) * fse3t(ji,jj,jk)105 ekb(ji,jj,jk) = xkrgb(1,irgb) * fse3t(ji,jj,jk) 106 ekg(ji,jj,jk) = xkrgb(2,irgb) * fse3t(ji,jj,jk) 107 ekr(ji,jj,jk) = xkrgb(3,irgb) * fse3t(ji,jj,jk) 106 108 END DO 107 109 END DO 108 110 END DO 109 110 111 111 ! !* Photosynthetically Available Radiation (PAR) 112 112 ! ! -------------------------------------- 113 114 IF( ln_varpar ) THEN 115 ze1(:,:,1) = par_varsw(:,:) * qsr(:,:) * EXP( -0.5 * zekb(:,:,1) ) 116 ze2(:,:,1) = par_varsw(:,:) * qsr(:,:) * EXP( -0.5 * zekg(:,:,1) ) 117 ze3(:,:,1) = par_varsw(:,:) * qsr(:,:) * EXP( -0.5 * zekr(:,:,1) ) 113 IF( l_trcdm2dc ) THEN ! diurnal cycle 114 ! 1% of qsr to compute euphotic layer 115 zqsr100(:,:) = 0.01 * qsr_mean(:,:) ! daily mean qsr 116 ! 117 CALL p4z_opt_par( kt, qsr_mean, ze1, ze2, ze3 ) 118 ! 119 DO jk = 1, nksrp 120 etot_ndcy(:,:,jk) = ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) 121 enano (:,:,jk) = 2.1 * ze1(:,:,jk) + 0.42 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk) 122 ediat (:,:,jk) = 1.6 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.7 * ze3(:,:,jk) 123 END DO 124 ! 125 CALL p4z_opt_par( kt, qsr, ze1, ze2, ze3 ) 126 ! 127 DO jk = 1, nksrp 128 etot(:,:,jk) = ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) 129 END DO 130 ! 118 131 ELSE 119 ze1(:,:,1) = xparsw * qsr(:,:) * EXP( -0.5 * zekb(:,:,1) ) 120 ze2(:,:,1) = xparsw * qsr(:,:) * EXP( -0.5 * zekg(:,:,1) ) 121 ze3(:,:,1) = xparsw * qsr(:,:) * EXP( -0.5 * zekr(:,:,1) ) 122 ENDIF 123 124 !CDIR NOVERRCHK 125 DO jj = 1, jpj 126 !CDIR NOVERRCHK 127 DO ji = 1, jpi 128 zc1 = ze1(ji,jj,1) 129 zc2 = ze2(ji,jj,1) 130 zc3 = ze3(ji,jj,1) 131 etot (ji,jj,1) = ( zc1 + zc2 + zc3 ) 132 enano(ji,jj,1) = ( 2.1 * zc1 + 0.42 * zc2 + 0.4 * zc3 ) 133 ediat(ji,jj,1) = ( 1.6 * zc1 + 0.69 * zc2 + 0.7 * zc3 ) 134 END DO 135 END DO 136 137 138 DO jk = 2, nksrp 139 !CDIR NOVERRCHK 140 DO jj = 1, jpj 141 !CDIR NOVERRCHK 142 DO ji = 1, jpi 143 zc1 = ze1(ji,jj,jk-1) * EXP( -0.5 * ( zekb(ji,jj,jk-1) + zekb(ji,jj,jk) ) ) 144 zc2 = ze2(ji,jj,jk-1) * EXP( -0.5 * ( zekg(ji,jj,jk-1) + zekg(ji,jj,jk) ) ) 145 zc3 = ze3(ji,jj,jk-1) * EXP( -0.5 * ( zekr(ji,jj,jk-1) + zekr(ji,jj,jk) ) ) 146 ze1 (ji,jj,jk) = zc1 147 ze2 (ji,jj,jk) = zc2 148 ze3 (ji,jj,jk) = zc3 149 etot (ji,jj,jk) = ( zc1 + zc2 + zc3 ) 150 enano(ji,jj,jk) = ( 2.1 * zc1 + 0.42 * zc2 + 0.4 * zc3 ) 151 ediat(ji,jj,jk) = ( 1.6 * zc1 + 0.69 * zc2 + 0.7 * zc3 ) 152 END DO 153 END DO 154 END DO 132 ! 1% of qsr to compute euphotic layer 133 zqsr100(:,:) = 0.01 * qsr(:,:) 134 ! 135 CALL p4z_opt_par( kt, qsr, ze1, ze2, ze3 ) 136 ! 137 DO jk = 1, nksrp 138 etot (:,:,jk) = ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) 139 enano(:,:,jk) = 2.1 * ze1(:,:,jk) + 0.42 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk) 140 ediat(:,:,jk) = 1.6 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.7 * ze3(:,:,jk) 141 END DO 142 etot_ndcy(:,:,:) = etot(:,:,:) 143 ENDIF 144 155 145 156 146 IF( ln_qsr_bio ) THEN !* heat flux accros w-level (used in the dynamics) 157 147 ! ! ------------------------ 158 zxsi0r = 1.e0 / rn_si0 159 ! 160 ze0(:,:,1) = rn_abs * qsr(:,:) 161 ! ! surface value : separation in R-G-B + near surface 162 IF( ln_varpar ) THEN 163 ze0(:,:,1) = ( 1. - 3. * par_varsw(:,:) ) * qsr(:,:) 164 ze1(:,:,1) = par_varsw(:,:) * qsr(:,:) 165 ze2(:,:,1) = par_varsw(:,:) * qsr(:,:) 166 ze3(:,:,1) = par_varsw(:,:) * qsr(:,:) 167 ELSE 168 ze0(:,:,1) = ( 1. - 3. * xparsw ) * qsr(:,:) 169 ze1(:,:,1) = xparsw * qsr(:,:) 170 ze2(:,:,1) = xparsw * qsr(:,:) 171 ze3(:,:,1) = xparsw * qsr(:,:) 172 ENDIF 148 CALL p4z_opt_par( kt, qsr, ze1, ze2, ze3, pe0=ze0 ) 149 ! 173 150 etot3(:,:,1) = qsr(:,:) * tmask(:,:,1) 174 !175 !176 151 DO jk = 2, nksrp + 1 177 !CDIR NOVERRCHK 178 DO jj = 1, jpj 179 !CDIR NOVERRCHK 180 DO ji = 1, jpi 181 zc0 = ze0(ji,jj,jk-1) * EXP( -fse3t(ji,jj,jk-1) * zxsi0r ) 182 zc1 = ze1(ji,jj,jk-1) * EXP( -zekb(ji,jj,jk-1 ) ) 183 zc2 = ze2(ji,jj,jk-1) * EXP( -zekg(ji,jj,jk-1 ) ) 184 zc3 = ze3(ji,jj,jk-1) * EXP( -zekr(ji,jj,jk-1 ) ) 185 ze0(ji,jj,jk) = zc0 186 ze1(ji,jj,jk) = zc1 187 ze2(ji,jj,jk) = zc2 188 ze3(ji,jj,jk) = zc3 189 etot3(ji,jj,jk) = ( zc0 + zc1 + zc2 + zc3 ) * tmask(ji,jj,jk) 190 END DO 191 ! 192 END DO 193 ! 194 END DO 195 ! 196 ENDIF 197 152 etot3(:,:,jk) = ( ze0(:,:,jk) + ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) ) * tmask(:,:,jk) 153 END DO 154 ! ! ------------------------ 155 ENDIF 198 156 ! !* Euphotic depth and level 199 157 neln(:,:) = 1 ! ------------------------ … … 203 161 DO jj = 1, jpj 204 162 DO ji = 1, jpi 205 IF( etot (ji,jj,jk) * tmask(ji,jj,jk) >= 0.0043 * qsr(ji,jj) ) THEN163 IF( etot_ndcy(ji,jj,jk) * tmask(ji,jj,jk) >= 0.43 * zqsr100(ji,jj) ) THEN 206 164 neln(ji,jj) = jk+1 ! Euphotic level : 1rst T-level strictly below Euphotic layer 207 ! ! nb: ensure the compatibility with nmld_trc definition in trd_m xl_trc_zint165 ! ! nb: ensure the compatibility with nmld_trc definition in trd_mld_trc_zint 208 166 heup(ji,jj) = fsdepw(ji,jj,jk+1) ! Euphotic layer depth 209 167 ENDIF … … 211 169 END DO 212 170 END DO 213 171 ! 214 172 heup(:,:) = MIN( 300., heup(:,:) ) 215 216 173 ! !* mean light over the mixed layer 217 174 zdepmoy(:,:) = 0.e0 ! ------------------------------- 218 zetmp (:,:) = 0.e0219 175 zetmp1 (:,:) = 0.e0 220 176 zetmp2 (:,:) = 0.e0 177 zetmp3 (:,:) = 0.e0 178 zetmp4 (:,:) = 0.e0 221 179 222 180 DO jk = 1, nksrp … … 226 184 DO ji = 1, jpi 227 185 IF( fsdepw(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 228 zetmp (ji,jj) = zetmp (ji,jj) + etot (ji,jj,jk) * fse3t(ji,jj,jk) 229 zetmp1 (ji,jj) = zetmp1 (ji,jj) + enano(ji,jj,jk) * fse3t(ji,jj,jk) 230 zetmp2 (ji,jj) = zetmp2 (ji,jj) + ediat(ji,jj,jk) * fse3t(ji,jj,jk) 186 zetmp1 (ji,jj) = zetmp1 (ji,jj) + etot (ji,jj,jk) * fse3t(ji,jj,jk) ! remineralisation 187 zetmp2 (ji,jj) = zetmp2 (ji,jj) + etot_ndcy(ji,jj,jk) * fse3t(ji,jj,jk) ! production 188 zetmp3 (ji,jj) = zetmp3 (ji,jj) + enano (ji,jj,jk) * fse3t(ji,jj,jk) ! production 189 zetmp4 (ji,jj) = zetmp4 (ji,jj) + ediat (ji,jj,jk) * fse3t(ji,jj,jk) ! production 231 190 zdepmoy(ji,jj) = zdepmoy(ji,jj) + fse3t(ji,jj,jk) 232 191 ENDIF … … 235 194 END DO 236 195 ! 237 emoy(:,:,:) = etot(:,:,:) 196 emoy(:,:,:) = etot(:,:,:) ! remineralisation 197 zpar(:,:,:) = etot_ndcy(:,:,:) ! diagnostic : PAR with no diurnal cycle 238 198 ! 239 199 DO jk = 1, nksrp … … 244 204 IF( fsdepw(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 245 205 z1_dep = 1. / ( zdepmoy(ji,jj) + rtrn ) 246 emoy (ji,jj,jk) = zetmp (ji,jj) * z1_dep 247 enano(ji,jj,jk) = zetmp1(ji,jj) * z1_dep 248 ediat(ji,jj,jk) = zetmp2(ji,jj) * z1_dep 206 emoy (ji,jj,jk) = zetmp1(ji,jj) * z1_dep 207 zpar (ji,jj,jk) = zetmp2(ji,jj) * z1_dep 208 enano(ji,jj,jk) = zetmp3(ji,jj) * z1_dep 209 ediat(ji,jj,jk) = zetmp4(ji,jj) * z1_dep 249 210 ENDIF 250 211 END DO 251 212 END DO 252 213 END DO 253 214 ! 254 215 IF( lk_iomput ) THEN 255 IF( jnt == nrdttrc ) THEN 256 IF( iom_use( "Heup" ) ) CALL iom_put( "Heup", heup(:,: ) * tmask(:,:,1) ) ! euphotic layer deptht 257 IF( iom_use( "PAR" ) ) CALL iom_put( "PAR" , emoy(:,:,:) * tmask(:,:,:) ) ! Photosynthetically Available Radiation 216 IF( knt == nrdttrc ) THEN 217 IF( iom_use( "Heup" ) ) CALL iom_put( "Heup" , heup(:,: ) * tmask(:,:,1) ) ! euphotic layer deptht 218 IF( iom_use( "PARDM" ) ) CALL iom_put( "PARDM", zpar(:,:,:) * tmask(:,:,:) ) ! Photosynthetically Available Radiation 219 IF( iom_use( "PAR" ) ) CALL iom_put( "PAR" , emoy(:,:,:) * tmask(:,:,:) ) ! Photosynthetically Available Radiation 258 220 ENDIF 259 221 ELSE 260 222 IF( ln_diatrc ) THEN ! save output diagnostics 261 trc2d(:,:, jp_pcs0_2d + 10) = heup(:,: ) * tmask(:,:,1) 223 trc2d(:,:, jp_pcs0_2d + 10) = heup(:,: ) * tmask(:,:,1) 262 224 trc3d(:,:,:,jp_pcs0_3d + 3) = etot(:,:,:) * tmask(:,:,:) 263 225 ENDIF 264 226 ENDIF 265 227 ! 266 CALL wrk_dealloc( jpi, jpj, z depmoy, zetmp, zetmp1, zetmp2)267 CALL wrk_dealloc( jpi, jpj, jpk, z ekg, zekr, zekb,ze0, ze1, ze2, ze3 )228 CALL wrk_dealloc( jpi, jpj, zqsr100, zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4 ) 229 CALL wrk_dealloc( jpi, jpj, jpk, zpar, ze0, ze1, ze2, ze3 ) 268 230 ! 269 231 IF( nn_timing == 1 ) CALL timing_stop('p4z_opt') … … 271 233 END SUBROUTINE p4z_opt 272 234 273 SUBROUTINE p4z_optsbc( kt ) 274 !!---------------------------------------------------------------------- 275 !! *** routine p4z_optsbc *** 235 SUBROUTINE p4z_opt_par( kt, pqsr, pe1, pe2, pe3, pe0 ) 236 !!---------------------------------------------------------------------- 237 !! *** routine p4z_opt_par *** 238 !! 239 !! ** purpose : compute PAR of each wavelength (Red-Green-Blue) 240 !! for a given shortwave radiation 241 !! 242 !!---------------------------------------------------------------------- 243 !! * arguments 244 INTEGER, INTENT(in) :: kt ! ocean time-step 245 REAL(wp), DIMENSION(jpi,jpj) , INTENT(in) :: pqsr ! shortwave 246 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pe1 , pe2 , pe3 ! PAR ( R-G-B) 247 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout), OPTIONAL :: pe0 248 !! * local variables 249 INTEGER :: ji, jj, jk ! dummy loop indices 250 REAL(wp), DIMENSION(jpi,jpj) :: zqsr ! shortwave 251 !!---------------------------------------------------------------------- 252 253 ! Real shortwave 254 IF( ln_varpar ) THEN ; zqsr(:,:) = par_varsw(:,:) * pqsr(:,:) 255 ELSE ; zqsr(:,:) = xparsw * pqsr(:,:) 256 ENDIF 257 ! 258 IF( PRESENT( pe0 ) ) THEN ! W-level 259 ! 260 pe0(:,:,1) = pqsr(:,:) - 3. * zqsr(:,:) ! ( 1 - 3 * alpha ) * q 261 pe1(:,:,1) = zqsr(:,:) 262 pe2(:,:,1) = zqsr(:,:) 263 pe3(:,:,1) = zqsr(:,:) 264 ! 265 DO jk = 2, nksrp + 1 266 !CDIR NOVERRCHK 267 DO jj = 1, jpj 268 !CDIR NOVERRCHK 269 DO ji = 1, jpi 270 pe0(ji,jj,jk) = pe0(ji,jj,jk-1) * EXP( -fse3t(ji,jj,jk-1) * xsi0r ) 271 pe1(ji,jj,jk) = pe1(ji,jj,jk-1) * EXP( -ekb(ji,jj,jk-1 ) ) 272 pe2(ji,jj,jk) = pe2(ji,jj,jk-1) * EXP( -ekg(ji,jj,jk-1 ) ) 273 pe3(ji,jj,jk) = pe3(ji,jj,jk-1) * EXP( -ekr(ji,jj,jk-1 ) ) 274 END DO 275 ! 276 END DO 277 ! 278 END DO 279 ! 280 ELSE ! T- level 281 ! 282 pe1(:,:,1) = zqsr(:,:) * EXP( -0.5 * ekb(:,:,1) ) 283 pe2(:,:,1) = zqsr(:,:) * EXP( -0.5 * ekg(:,:,1) ) 284 pe3(:,:,1) = zqsr(:,:) * EXP( -0.5 * ekr(:,:,1) ) 285 ! 286 DO jk = 2, nksrp 287 !CDIR NOVERRCHK 288 DO jj = 1, jpj 289 !CDIR NOVERRCHK 290 DO ji = 1, jpi 291 pe1(ji,jj,jk) = pe1(ji,jj,jk-1) * EXP( -0.5 * ( ekb(ji,jj,jk-1) + ekb(ji,jj,jk) ) ) 292 pe2(ji,jj,jk) = pe2(ji,jj,jk-1) * EXP( -0.5 * ( ekg(ji,jj,jk-1) + ekg(ji,jj,jk) ) ) 293 pe3(ji,jj,jk) = pe3(ji,jj,jk-1) * EXP( -0.5 * ( ekr(ji,jj,jk-1) + ekr(ji,jj,jk) ) ) 294 END DO 295 END DO 296 END DO 297 ! 298 ENDIF 299 ! 300 END SUBROUTINE p4z_opt_par 301 302 303 SUBROUTINE p4z_opt_sbc( kt ) 304 !!---------------------------------------------------------------------- 305 !! *** routine p4z_opt_sbc *** 276 306 !! 277 307 !! ** purpose : read and interpolate the variable PAR fraction … … 284 314 !!---------------------------------------------------------------------- 285 315 !! * arguments 286 INTEGER , INTENT( in ) :: kt! ocean time step316 INTEGER , INTENT(in) :: kt ! ocean time step 287 317 288 318 !! * local declarations … … 297 327 IF( kt == nit000 .OR. ( kt /= nit000 .AND. ntimes_par > 1 ) ) THEN 298 328 CALL fld_read( kt, 1, sf_par ) 299 par_varsw(:,:) = ( sf_par(1)%fnow(:,:,1) ) /3.0329 par_varsw(:,:) = ( sf_par(1)%fnow(:,:,1) ) / 3.0 300 330 ENDIF 301 331 ENDIF … … 303 333 IF( nn_timing == 1 ) CALL timing_stop('p4z_optsbc') 304 334 ! 305 END SUBROUTINE p4z_opt sbc335 END SUBROUTINE p4z_opt_sbc 306 336 307 337 SUBROUTINE p4z_opt_init … … 347 377 ! 348 378 xparsw = parlux / 3.0 379 xsi0r = 1.e0 / rn_si0 349 380 ! 350 381 ! Variable PAR at the surface of the ocean … … 372 403 IF(lwp) WRITE(numout,*) ' level of light extinction = ', nksrp, ' ref depth = ', gdepw_1d(nksrp+1), ' m' 373 404 ! 374 etot (:,:,:) = 0._wp 375 enano(:,:,:) = 0._wp 376 ediat(:,:,:) = 0._wp 377 IF( ln_qsr_bio ) etot3(:,:,:) = 0._wp 405 ekr (:,:,:) = 0._wp 406 ekb (:,:,:) = 0._wp 407 ekg (:,:,:) = 0._wp 408 etot (:,:,:) = 0._wp 409 etot_ndcy(:,:,:) = 0._wp 410 enano (:,:,:) = 0._wp 411 ediat (:,:,:) = 0._wp 412 IF( ln_qsr_bio ) etot3 (:,:,:) = 0._wp 378 413 ! 379 414 IF( nn_timing == 1 ) CALL timing_stop('p4z_opt_init') … … 386 421 !! *** ROUTINE p4z_opt_alloc *** 387 422 !!---------------------------------------------------------------------- 388 ALLOCATE( enano(jpi,jpj,jpk), ediat(jpi,jpj,jpk), emoy (jpi,jpj,jpk), STAT=p4z_opt_alloc ) 423 ALLOCATE( ekb(jpi,jpj,jpk) , ekr(jpi,jpj,jpk), ekg(jpi,jpj,jpk), & 424 & enano(jpi,jpj,jpk) , ediat(jpi,jpj,jpk), & 425 & etot_ndcy(jpi,jpj,jpk), emoy (jpi,jpj,jpk), STAT=p4z_opt_alloc ) 389 426 ! 390 427 IF( p4z_opt_alloc /= 0 ) CALL ctl_warn('p4z_opt_alloc : failed to allocate arrays.') -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zprod.F90
r4996 r5385 64 64 CONTAINS 65 65 66 SUBROUTINE p4z_prod( kt , jnt )66 SUBROUTINE p4z_prod( kt , knt ) 67 67 !!--------------------------------------------------------------------- 68 68 !! *** ROUTINE p4z_prod *** … … 74 74 !!--------------------------------------------------------------------- 75 75 ! 76 INTEGER, INTENT(in) :: kt, jnt76 INTEGER, INTENT(in) :: kt, knt 77 77 ! 78 78 INTEGER :: ji, jj, jk … … 129 129 END DO 130 130 131 IF( ln_newprod ) THEN 132 ! Impact of the day duration on phytoplankton growth 133 DO jk = 1, jpkm1 134 DO jj = 1 ,jpj 135 DO ji = 1, jpi 136 IF( etot(ji,jj,jk) > 1.E-3 ) THEN 137 zval = MAX( 1., zstrn(ji,jj) ) 138 zval = 1.5 * zval / ( 12. + zval ) 139 zprbio(ji,jj,jk) = prmax(ji,jj,jk) * zval 140 zprdia(ji,jj,jk) = zprbio(ji,jj,jk) 141 ENDIF 142 END DO 143 END DO 144 END DO 145 ENDIF 131 ! Impact of the day duration on phytoplankton growth 132 DO jk = 1, jpkm1 133 DO jj = 1 ,jpj 134 DO ji = 1, jpi 135 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 136 zval = MAX( 1., zstrn(ji,jj) ) 137 zval = 1.5 * zval / ( 12. + zval ) 138 zprbio(ji,jj,jk) = prmax(ji,jj,jk) * zval 139 zprdia(ji,jj,jk) = zprbio(ji,jj,jk) 140 ENDIF 141 END DO 142 END DO 143 END DO 146 144 147 145 ! Maximum light intensity … … 157 155 DO ji = 1, jpi 158 156 ! Computation of the P-I slope for nanos and diatoms 159 IF( etot (ji,jj,jk) > 1.E-3 ) THEN157 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 160 158 ztn = MAX( 0., tsn(ji,jj,jk,jp_tem) - 15. ) 161 159 zadap = xadap * ztn / ( 2.+ ztn ) 162 zconctemp = MAX( 0.e0 , tr n(ji,jj,jk,jpdia) - xsizedia )163 zconctemp2 = tr n(ji,jj,jk,jpdia) - zconctemp160 zconctemp = MAX( 0.e0 , trb(ji,jj,jk,jpdia) - xsizedia ) 161 zconctemp2 = trb(ji,jj,jk,jpdia) - zconctemp 164 162 znanotot = enano(ji,jj,jk) * zstrn(ji,jj) 165 163 zdiattot = ediat(ji,jj,jk) * zstrn(ji,jj) 166 164 ! 167 165 zpislopead (ji,jj,jk) = pislope * ( 1.+ zadap * EXP( -znanotot ) ) & 168 & * tr n(ji,jj,jk,jpnch) /( trn(ji,jj,jk,jpphy) * 12. + rtrn)166 & * trb(ji,jj,jk,jpnch) /( trb(ji,jj,jk,jpphy) * 12. + rtrn) 169 167 ! 170 zpislopead2(ji,jj,jk) = (pislope * zconctemp2 + pislope2 * zconctemp) / ( tr n(ji,jj,jk,jpdia) + rtrn ) &171 & * tr n(ji,jj,jk,jpdch) /( trn(ji,jj,jk,jpdia) * 12. + rtrn)168 zpislopead2(ji,jj,jk) = (pislope * zconctemp2 + pislope2 * zconctemp) / ( trb(ji,jj,jk,jpdia) + rtrn ) & 169 & * trb(ji,jj,jk,jpdch) /( trb(ji,jj,jk,jpdia) * 12. + rtrn) 172 170 173 171 ! Computation of production function for Carbon … … 196 194 197 195 ! Computation of the P-I slope for nanos and diatoms 198 IF( etot (ji,jj,jk) > 1.E-3 ) THEN196 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 199 197 ztn = MAX( 0., tsn(ji,jj,jk,jp_tem) - 15. ) 200 198 zadap = ztn / ( 2.+ ztn ) 201 zconctemp = MAX( 0.e0 , trn(ji,jj,jk,jpdia) - xsizedia ) 202 zconctemp2 = trn(ji,jj,jk,jpdia) - zconctemp 199 zconctemp = MAX( 0.e0 , trb(ji,jj,jk,jpdia) - xsizedia ) 200 zconctemp2 = trb(ji,jj,jk,jpdia) - zconctemp 201 znanotot = enano(ji,jj,jk) * zstrn(ji,jj) 202 zdiattot = ediat(ji,jj,jk) * zstrn(ji,jj) 203 203 ! 204 zpislopead (ji,jj,jk) = pislope * ( 1.+ zadap * EXP( - 0.21 * enano(ji,jj,jk)) )205 zpislopead2(ji,jj,jk) = (pislope * zconctemp2 + pislope2 * zconctemp) / ( tr n(ji,jj,jk,jpdia) + rtrn )206 207 zpislopen = zpislopead(ji,jj,jk) * tr n(ji,jj,jk,jpnch) &208 & / ( tr n(ji,jj,jk,jpphy) * 12. + rtrn ) &204 zpislopead (ji,jj,jk) = pislope * ( 1.+ zadap * EXP( -znanotot ) ) 205 zpislopead2(ji,jj,jk) = (pislope * zconctemp2 + pislope2 * zconctemp) / ( trb(ji,jj,jk,jpdia) + rtrn ) 206 207 zpislopen = zpislopead(ji,jj,jk) * trb(ji,jj,jk,jpnch) & 208 & / ( trb(ji,jj,jk,jpphy) * 12. + rtrn ) & 209 209 & / ( prmax(ji,jj,jk) * rday * xlimphy(ji,jj,jk) + rtrn ) 210 210 211 zpislope2n = zpislopead2(ji,jj,jk) * tr n(ji,jj,jk,jpdch) &212 & / ( tr n(ji,jj,jk,jpdia) * 12. + rtrn ) &211 zpislope2n = zpislopead2(ji,jj,jk) * trb(ji,jj,jk,jpdch) & 212 & / ( trb(ji,jj,jk,jpdia) * 12. + rtrn ) & 213 213 & / ( prmax(ji,jj,jk) * rday * xlimdia(ji,jj,jk) + rtrn ) 214 214 215 215 ! Computation of production function for Carbon 216 216 ! --------------------------------------------- 217 zprbio(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk)) )218 zprdia(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislope2n * ediat(ji,jj,jk)) )217 zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen * znanotot ) ) 218 zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpislope2n * zdiattot ) ) 219 219 220 220 ! Computation of production function for Chlorophyll 221 221 !-------------------------------------------------- 222 zprnch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) * zstrn(ji,jj)) )223 zprdch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislope2n * ediat(ji,jj,jk) * zstrn(ji,jj)) )222 zprnch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) ) ) 223 zprdch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislope2n * ediat(ji,jj,jk) ) ) 224 224 ENDIF 225 225 END DO … … 252 252 DO ji = 1, jpi 253 253 254 IF( etot (ji,jj,jk) > 1.E-3 ) THEN254 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 255 255 ! Si/C of diatoms 256 256 ! ------------------------ … … 258 258 ! Si/C is arbitrariliy increased for very high Si concentrations 259 259 ! to mimic the very high ratios observed in the Southern Ocean (silpot2) 260 zlim = tr n(ji,jj,jk,jpsil) / ( trn(ji,jj,jk,jpsil) + xksi1 )260 zlim = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi1 ) 261 261 zsilim = MIN( zprdia(ji,jj,jk) / ( prmax(ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) ) 262 262 zsilfac = 4.4 * EXP( -4.23 * zsilim ) * MAX( 0.e0, MIN( 1., 2.2 * ( zlim - 0.5 ) ) ) + 1.e0 263 zsiborn = tr n(ji,jj,jk,jpsil) * trn(ji,jj,jk,jpsil) * trn(ji,jj,jk,jpsil)263 zsiborn = trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) 264 264 IF (gphit(ji,jj) < -30 ) THEN 265 265 zsilfac2 = 1. + 2. * zsiborn / ( zsiborn + xksi2**3 ) … … 302 302 !CDIR NOVERRCHK 303 303 DO ji = 1, jpi 304 IF( etot (ji,jj,jk) > 1.E-3 ) THEN304 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 305 305 ! production terms for nanophyto. 306 zprorca(ji,jj,jk) = zprbio(ji,jj,jk) * xlimphy(ji,jj,jk) * tr n(ji,jj,jk,jpphy) * rfact2306 zprorca(ji,jj,jk) = zprbio(ji,jj,jk) * xlimphy(ji,jj,jk) * trb(ji,jj,jk,jpphy) * rfact2 307 307 zpronew(ji,jj,jk) = zprorca(ji,jj,jk) * xnanono3(ji,jj,jk) / ( xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) + rtrn ) 308 308 ! 309 zratio = tr n(ji,jj,jk,jpnfe) / ( trn(ji,jj,jk,jpphy) + rtrn )309 zratio = trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) + rtrn ) 310 310 zratio = zratio / fecnm 311 311 zmax = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) ) … … 313 313 & * ( 4. - 4.5 * xlimnfe(ji,jj,jk) / ( xlimnfe(ji,jj,jk) + 0.5 ) ) & 314 314 & * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concnfe(ji,jj,jk) ) & 315 & * zmax * tr n(ji,jj,jk,jpphy) * rfact2315 & * zmax * trb(ji,jj,jk,jpphy) * rfact2 316 316 ! production terms for diatomees 317 zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * tr n(ji,jj,jk,jpdia) * rfact2317 zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * trb(ji,jj,jk,jpdia) * rfact2 318 318 zpronewd(ji,jj,jk) = zprorcad(ji,jj,jk) * xdiatno3(ji,jj,jk) / ( xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) + rtrn ) 319 319 ! 320 zratio = tr n(ji,jj,jk,jpdfe) / ( trn(ji,jj,jk,jpdia) + rtrn )320 zratio = trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) + rtrn ) 321 321 zratio = zratio / fecdm 322 322 zmax = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) ) … … 324 324 & * ( 4. - 4.5 * xlimdfe(ji,jj,jk) / ( xlimdfe(ji,jj,jk) + 0.5 ) ) & 325 325 & * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concdfe(ji,jj,jk) ) & 326 & * zmax * tr n(ji,jj,jk,jpdia) * rfact2326 & * zmax * trb(ji,jj,jk,jpdia) * rfact2 327 327 ENDIF 328 328 END DO … … 341 341 zprdch(ji,jj,jk) = zprdch(ji,jj,jk) * zmixdiat(ji,jj) 342 342 ENDIF 343 IF( etot (ji,jj,jk) > 1.E-3 ) THEN343 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 344 344 ! production terms for nanophyto. ( chlorophyll ) 345 345 znanotot = enano(ji,jj,jk) * zstrn(ji,jj) … … 365 365 !CDIR NOVERRCHK 366 366 DO ji = 1, jpi 367 IF( etot (ji,jj,jk) > 1.E-3 ) THEN367 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 368 368 ! production terms for nanophyto. ( chlorophyll ) 369 znanotot = enano(ji,jj,jk) * zstrn(ji,jj)370 zprod = rday * zprorca(ji,jj,jk) * zprnch(ji,jj,jk) * tr n(ji,jj,jk,jpphy) * xlimphy(ji,jj,jk)369 znanotot = enano(ji,jj,jk) 370 zprod = rday * zprorca(ji,jj,jk) * zprnch(ji,jj,jk) * trb(ji,jj,jk,jpphy) * xlimphy(ji,jj,jk) 371 371 zprochln(ji,jj,jk) = chlcmin * 12. * zprorca (ji,jj,jk) 372 372 zprochln(ji,jj,jk) = zprochln(ji,jj,jk) + (chlcnm-chlcmin) * 144. * zprod & 373 & / ( zpislopead(ji,jj,jk) * tr n(ji,jj,jk,jpnch) * znanotot +rtrn )373 & / ( zpislopead(ji,jj,jk) * trb(ji,jj,jk,jpnch) * znanotot +rtrn ) 374 374 ! production terms for diatomees ( chlorophyll ) 375 zdiattot = ediat(ji,jj,jk) * zstrn(ji,jj)376 zprod = rday * zprorcad(ji,jj,jk) * zprdch(ji,jj,jk) * tr n(ji,jj,jk,jpdia) * xlimdia(ji,jj,jk)375 zdiattot = ediat(ji,jj,jk) 376 zprod = rday * zprorcad(ji,jj,jk) * zprdch(ji,jj,jk) * trb(ji,jj,jk,jpdia) * xlimdia(ji,jj,jk) 377 377 zprochld(ji,jj,jk) = chlcmin * 12. * zprorcad(ji,jj,jk) 378 378 zprochld(ji,jj,jk) = zprochld(ji,jj,jk) + (chlcdm-chlcmin) * 144. * zprod & 379 & / ( zpislopead2(ji,jj,jk) * tr n(ji,jj,jk,jpdch) * zdiattot +rtrn )379 & / ( zpislopead2(ji,jj,jk) * trb(ji,jj,jk,jpdch) * zdiattot +rtrn ) 380 380 ENDIF 381 381 END DO … … 414 414 415 415 ! Total primary production per year 416 IF( iom_use( "tintpp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. jnt == nrdttrc ) ) &416 IF( iom_use( "tintpp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. knt == nrdttrc ) ) & 417 417 & tpp = glob_sum( ( zprorca(:,:,:) + zprorcad(:,:,:) ) * cvol(:,:,:) ) 418 418 419 419 IF( lk_iomput ) THEN 420 IF( jnt == nrdttrc ) THEN420 IF( knt == nrdttrc ) THEN 421 421 CALL wrk_alloc( jpi, jpj, zw2d ) 422 422 CALL wrk_alloc( jpi, jpj, jpk, zw3d ) -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zrem.F90
r4996 r5385 59 59 CONTAINS 60 60 61 SUBROUTINE p4z_rem( kt, jnt )61 SUBROUTINE p4z_rem( kt, knt ) 62 62 !!--------------------------------------------------------------------- 63 63 !! *** ROUTINE p4z_rem *** … … 68 68 !!--------------------------------------------------------------------- 69 69 ! 70 INTEGER, INTENT(in) :: kt, jnt ! ocean time step70 INTEGER, INTENT(in) :: kt, knt ! ocean time step 71 71 ! 72 72 INTEGER :: ji, jj, jk … … 104 104 zdep = MAX( hmld(ji,jj), heup(ji,jj) ) 105 105 IF( fsdept(ji,jj,jk) < zdep ) THEN 106 zdepbac(ji,jj,jk) = MIN( 0.7 * ( tr n(ji,jj,jk,jpzoo) + 2.* trn(ji,jj,jk,jpmes) ), 4.e-6 )106 zdepbac(ji,jj,jk) = MIN( 0.7 * ( trb(ji,jj,jk,jpzoo) + 2.* trb(ji,jj,jk,jpmes) ), 4.e-6 ) 107 107 ztempbac(ji,jj) = zdepbac(ji,jj,jk) 108 108 ELSE … … 119 119 DO ji = 1, jpi 120 120 ! denitrification factor computed from O2 levels 121 nitrfac(ji,jj,jk) = MAX( 0.e0, 0.4 * ( 6.e-6 - tr n(ji,jj,jk,jpoxy) ) &122 & / ( oxymin + tr n(ji,jj,jk,jpoxy) ) )121 nitrfac(ji,jj,jk) = MAX( 0.e0, 0.4 * ( 6.e-6 - trb(ji,jj,jk,jpoxy) ) & 122 & / ( oxymin + trb(ji,jj,jk,jpoxy) ) ) 123 123 nitrfac(ji,jj,jk) = MIN( 1., nitrfac(ji,jj,jk) ) 124 124 END DO … … 140 140 ! Ammonification in oxic waters with oxygen consumption 141 141 ! ----------------------------------------------------- 142 zolimit = zremik * ( 1.- nitrfac(ji,jj,jk) ) * tr n(ji,jj,jk,jpdoc)143 zolimi(ji,jj,jk) = MIN( ( tr n(ji,jj,jk,jpoxy) - rtrn ) / o2ut, zolimit )142 zolimit = zremik * ( 1.- nitrfac(ji,jj,jk) ) * trb(ji,jj,jk,jpdoc) 143 zolimi(ji,jj,jk) = MIN( ( trb(ji,jj,jk,jpoxy) - rtrn ) / o2ut, zolimit ) 144 144 ! Ammonification in suboxic waters with denitrification 145 145 ! ------------------------------------------------------- 146 denitr(ji,jj,jk) = MIN( ( tr n(ji,jj,jk,jpno3) - rtrn ) / rdenit, &147 & zremik * nitrfac(ji,jj,jk) * tr n(ji,jj,jk,jpdoc) )146 denitr(ji,jj,jk) = MIN( ( trb(ji,jj,jk,jpno3) - rtrn ) / rdenit, & 147 & zremik * nitrfac(ji,jj,jk) * trb(ji,jj,jk,jpdoc) ) 148 148 ! 149 149 zolimi (ji,jj,jk) = MAX( 0.e0, zolimi (ji,jj,jk) ) … … 165 165 ! below 2 umol/L. Inhibited at strong light 166 166 ! ---------------------------------------------------------- 167 zonitr =nitrif * zstep * tr n(ji,jj,jk,jpnh4) / ( 1.+ emoy(ji,jj,jk) ) * ( 1.- nitrfac(ji,jj,jk) )168 denitnh4(ji,jj,jk) = nitrif * zstep * tr n(ji,jj,jk,jpnh4) * nitrfac(ji,jj,jk)167 zonitr =nitrif * zstep * trb(ji,jj,jk,jpnh4) / ( 1.+ emoy(ji,jj,jk) ) * ( 1.- nitrfac(ji,jj,jk) ) 168 denitnh4(ji,jj,jk) = nitrif * zstep * trb(ji,jj,jk,jpnh4) * nitrfac(ji,jj,jk) 169 169 ! Update of the tracers trends 170 170 ! ---------------------------- … … 192 192 ! ---------------------------------------------------------- 193 193 zbactfer = 10.e-6 * rfact2 * prmax(ji,jj,jk) * xlimbacl(ji,jj,jk) & 194 & * tr n(ji,jj,jk,jpfer) / ( 2.5E-10 + trn(ji,jj,jk,jpfer) ) &194 & * trb(ji,jj,jk,jpfer) / ( 2.5E-10 + trb(ji,jj,jk,jpfer) ) & 195 195 & * zdepprod(ji,jj,jk) * zdepbac(ji,jj,jk) 196 196 #if defined key_kriest … … 228 228 ! means a disaggregation constant about 0.5 the value in oxic zones 229 229 ! ----------------------------------------------------------------- 230 zorem = zremip * tr n(ji,jj,jk,jppoc)231 zofer = zremip * tr n(ji,jj,jk,jpsfe)230 zorem = zremip * trb(ji,jj,jk,jppoc) 231 zofer = zremip * trb(ji,jj,jk,jpsfe) 232 232 #if ! defined key_kriest 233 zorem2 = zremip * tr n(ji,jj,jk,jpgoc)234 zofer2 = zremip * tr n(ji,jj,jk,jpbfe)233 zorem2 = zremip * trb(ji,jj,jk,jpgoc) 234 zofer2 = zremip * trb(ji,jj,jk,jpbfe) 235 235 #else 236 zorem2 = zremip * tr n(ji,jj,jk,jpnum)236 zorem2 = zremip * trb(ji,jj,jk,jpnum) 237 237 #endif 238 238 … … 272 272 ! Remineralization rate of BSi depedant on T and saturation 273 273 ! --------------------------------------------------------- 274 zsatur = ( sio3eq(ji,jj,jk) - tr n(ji,jj,jk,jpsil) ) / ( sio3eq(ji,jj,jk) + rtrn )274 zsatur = ( sio3eq(ji,jj,jk) - trb(ji,jj,jk,jpsil) ) / ( sio3eq(ji,jj,jk) + rtrn ) 275 275 zsatur = MAX( rtrn, zsatur ) 276 276 zsatur2 = ( 1. + tsn(ji,jj,jk,jp_tem) / 400.)**37 … … 287 287 zfactdep = xsilab * EXP(-( xsiremlab - xsirem ) * znusil2 * zdep / wsbio2 ) * ztem / ( ztem + 10. ) 288 288 zsiremin = ( xsiremlab * zfactdep + xsirem * ( 1. - zfactdep ) ) * zstep * znusil 289 zosil = zsiremin * tr n(ji,jj,jk,jpgsi)289 zosil = zsiremin * trb(ji,jj,jk,jpgsi) 290 290 ! 291 291 tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) - zosil … … 315 315 END DO 316 316 317 IF( jnt == nrdttrc ) THEN317 IF( knt == nrdttrc ) THEN 318 318 CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 319 319 zfact = 1.e+3 * rfact2r ! conversion from mol/l/kt to mol/m3/s -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsbc.F90
r5215 r5385 136 136 DO jj = 1, jpj 137 137 DO ji = 1, jpi 138 zcoef = ryyss * cvol(ji,jj,1)138 zcoef = ryyss * e1e2t(ji,jj) * h_rnf(ji,jj) 139 139 rivalk(ji,jj) = sf_river(jr_dic)%fnow(ji,jj,1) & 140 140 & * 1.E3 / ( 12. * zcoef + rtrn ) … … 187 187 INTEGER :: ierr, ierr1, ierr2, ierr3 188 188 INTEGER :: ios ! Local integer output status for namelist read 189 INTEGER :: ik50 ! last level where depth less than 50 m 190 INTEGER :: isrow ! index for ORCA1 starting row 189 191 REAL(wp) :: zexpide, zdenitide, zmaskt 190 192 REAL(wp) :: ztimes_dust, ztimes_riv, ztimes_ndep … … 216 218 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampissbc in configuration namelist', lwp ) 217 219 IF(lwm) WRITE ( numonp, nampissbc ) 220 221 IF ( ( nn_ice_tr >= 0 ) .AND. ln_ironice ) THEN 222 WRITE(numout,*) ' ln_ironice incompatible with nn_ice_tr = ', nn_ice_tr 223 WRITE(numout,*) ' Specify your sea ice iron concentration in nampisice instead ' 224 WRITE(numout,*) ' ln_ironice is forced to .FALSE. ' 225 ln_ironice = .FALSE. 226 ENDIF 218 227 219 228 IF(lwp) THEN … … 247 256 ENDIF 248 257 258 ! set the number of level over which river runoffs are applied 259 ! online configuration : computed in sbcrnf 260 IF( lk_offline ) THEN 261 nk_rnf(:,:) = 1 262 h_rnf (:,:) = fsdept(:,:,1) 263 ENDIF 264 249 265 ! dust input from the atmosphere 250 266 ! ------------------------------ … … 358 374 rivalkinput = 0._wp 359 375 END IF 360 361 376 ! nutrient input from dust 362 377 ! ------------------------ … … 410 425 CALL iom_close( numiron ) 411 426 ! 412 DO jk = 1, 5 427 ik50 = 5 ! last level where depth less than 50 m 428 DO jk = jpkm1, 1, -1 429 IF( gdept_1d(jk) > 50. ) ik50 = jk - 1 430 END DO 431 IF (lwp) WRITE(numout,*) 432 IF (lwp) WRITE(numout,*) ' Level corresponding to 50m depth ', ik50,' ', gdept_1d(ik50+1) 433 IF (lwp) WRITE(numout,*) 434 DO jk = 1, ik50 413 435 DO jj = 2, jpjm1 414 436 DO ji = fs_2, fs_jpim1 … … 421 443 END DO 422 444 END DO 423 IF( cp_cfg == 'orca' .AND. jp_cfg == 2 ) THEN 424 ii0 = 176 ; ii1 = 176 ! Southern Island : Kerguelen 425 ij0 = 37 ; ij1 = 37 ; zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 426 ! 427 ii0 = 119 ; ii1 = 119 ! South Georgia 428 ij0 = 29 ; ij1 = 29 ; zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 429 ! 430 ii0 = 111 ; ii1 = 111 ! Falklands 431 ij0 = 35 ; ij1 = 35 ; zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 432 ! 433 ii0 = 168 ; ii1 = 168 ! Crozet 434 ij0 = 40 ; ij1 = 40 ; zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 435 ! 436 ii0 = 119 ; ii1 = 119 ! South Orkney 437 ij0 = 28 ; ij1 = 28 ; zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 438 ! 439 ii0 = 140 ; ii1 = 140 ! Bouvet Island 440 ij0 = 33 ; ij1 = 33 ; zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 441 ! 442 ii0 = 178 ; ii1 = 178 ! Prince edwards 443 ij0 = 34 ; ij1 = 34 ; zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 444 ! 445 ii0 = 43 ; ii1 = 43 ! Balleny islands 446 ij0 = 21 ; ij1 = 21 ; zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 447 ENDIF 445 ! 448 446 CALL lbc_lnk( zcmask , 'T', 1. ) ! lateral boundary conditions on cmask (sign unchanged) 447 ! 449 448 DO jk = 1, jpk 450 449 DO jj = 1, jpj -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsed.F90
r5215 r5385 21 21 USE p4zopt ! optical model 22 22 USE p4zlim ! Co-limitations of differents nutrients 23 USE p4zrem ! Remineralisation of organic matter24 23 USE p4zsbc ! External source of nutrients 25 24 USE p4zint ! interpolation and computation of various fields … … 30 29 PRIVATE 31 30 32 PUBLIC p4z_sed 31 PUBLIC p4z_sed 32 PUBLIC p4z_sed_alloc 33 33 34 34 35 !! * Module variables 36 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: nitrpot !: Nitrogen fixation 37 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,: ) :: sdenit !: Nitrate reduction in the sediments 35 38 REAL(wp) :: r1_rday !: inverse of rday 36 37 INTEGER :: numnit38 39 39 40 40 !!* Substitution … … 47 47 CONTAINS 48 48 49 SUBROUTINE p4z_sed( kt, jnt )49 SUBROUTINE p4z_sed( kt, knt ) 50 50 !!--------------------------------------------------------------------- 51 51 !! *** ROUTINE p4z_sed *** … … 58 58 !!--------------------------------------------------------------------- 59 59 ! 60 INTEGER, INTENT(in) :: kt, jnt ! ocean time step60 INTEGER, INTENT(in) :: kt, knt ! ocean time step 61 61 INTEGER :: ji, jj, jk, ikt 62 62 #if ! defined key_sed … … 69 69 REAL(wp) :: zsiloss, zcaloss, zws3, zws4, zwsc, zdep, zwstpoc 70 70 REAL(wp) :: ztrfer, ztrpo4, zwdust, zlight 71 REAL(wp) :: zrdenittot, zsdenittot, znitrpottot72 71 ! 73 72 CHARACTER (len=25) :: charout 74 REAL(wp), POINTER, DIMENSION(:,: ) :: zpdep, zsidep, zwork1, zwork2, zwork3 , zwork473 REAL(wp), POINTER, DIMENSION(:,: ) :: zpdep, zsidep, zwork1, zwork2, zwork3 75 74 REAL(wp), POINTER, DIMENSION(:,: ) :: zdenit2d, zironice, zbureff 76 75 REAL(wp), POINTER, DIMENSION(:,: ) :: zwsbio3, zwsbio4, zwscal 77 REAL(wp), POINTER, DIMENSION(:,:,:) :: z nitrpot, zirondep, zsoufer76 REAL(wp), POINTER, DIMENSION(:,:,:) :: zirondep, zsoufer 78 77 !!--------------------------------------------------------------------- 79 78 ! 80 79 IF( nn_timing == 1 ) CALL timing_start('p4z_sed') 81 80 ! 82 IF( kt == nittrc000 .AND. jnt == 1 ) THEN 83 r1_rday = 1. / rday 84 IF( ln_check_mass .AND. lwp) & 85 & CALL ctl_opn( numnit, 'nitrogen.budget', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 86 ENDIF 81 IF( kt == nittrc000 .AND. knt == 1 ) r1_rday = 1. / rday 87 82 ! 88 83 ! Allocate temporary workspace 89 CALL wrk_alloc( jpi, jpj, zdenit2d, zwork1, zwork2, zwork3, z work4, zbureff )84 CALL wrk_alloc( jpi, jpj, zdenit2d, zwork1, zwork2, zwork3, zbureff ) 90 85 CALL wrk_alloc( jpi, jpj, zwsbio3, zwsbio4, zwscal ) 91 CALL wrk_alloc( jpi, jpj, jpk, z nitrpot, zsoufer )86 CALL wrk_alloc( jpi, jpj, jpk, zsoufer ) 92 87 93 88 zdenit2d(:,:) = 0.e0 … … 96 91 zwork2 (:,:) = 0.e0 97 92 zwork3 (:,:) = 0.e0 98 zwork4 (:,:) = 0.e099 93 100 94 ! Iron input/uptake due to sea ice : Crude parameterization based on Lancelot et al. … … 108 102 zdep = rfact2 / fse3t(ji,jj,1) 109 103 zwflux = fmmflx(ji,jj) / 1000._wp 110 zfminus = MIN( 0._wp, -zwflux ) * tr n(ji,jj,1,jpfer) * zdep104 zfminus = MIN( 0._wp, -zwflux ) * trb(ji,jj,1,jpfer) * zdep 111 105 zfplus = MAX( 0._wp, -zwflux ) * icefeinput * zdep 112 106 zironice(ji,jj) = zfplus + zfminus … … 114 108 END DO 115 109 ! 116 tr n(:,:,1,jpfer) = trn(:,:,1,jpfer) + zironice(:,:)110 tra(:,:,1,jpfer) = tra(:,:,1,jpfer) + zironice(:,:) 117 111 ! 118 IF( lk_iomput .AND. jnt == nrdttrc .AND. iom_use( "Ironice" ) ) &112 IF( lk_iomput .AND. knt == nrdttrc .AND. iom_use( "Ironice" ) ) & 119 113 & CALL iom_put( "Ironice", zironice(:,:) * 1.e+3 * rfact2r * fse3t(:,:,1) * tmask(:,:,1) ) ! iron flux from ice 120 114 ! … … 144 138 END DO 145 139 ! ! Iron solubilization of particles in the water column 146 tr n(:,:,1,jppo4) = trn(:,:,1,jppo4) + zpdep (:,:)147 tr n(:,:,1,jpsil) = trn(:,:,1,jpsil) + zsidep (:,:)148 tr n(:,:,:,jpfer) = trn(:,:,:,jpfer) + zirondep(:,:,:)140 tra(:,:,1,jppo4) = tra(:,:,1,jppo4) + zpdep (:,:) 141 tra(:,:,1,jpsil) = tra(:,:,1,jpsil) + zsidep (:,:) 142 tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + zirondep(:,:,:) 149 143 ! 150 144 IF( lk_iomput ) THEN 151 IF( jnt == nrdttrc ) THEN145 IF( knt == nrdttrc ) THEN 152 146 IF( iom_use( "Irondep" ) ) & 153 147 & CALL iom_put( "Irondep", zirondep(:,:,1) * 1.e+3 * rfact2r * fse3t(:,:,1) * tmask(:,:,1) ) ! surface downward dust depo of iron … … 167 161 ! ---------------------------------------------------------- 168 162 IF( ln_river ) THEN 169 trn(:,:,1,jppo4) = trn(:,:,1,jppo4) + rivdip(:,:) * rfact2 170 trn(:,:,1,jpno3) = trn(:,:,1,jpno3) + rivdin(:,:) * rfact2 171 trn(:,:,1,jpfer) = trn(:,:,1,jpfer) + rivdic(:,:) * 5.e-5 * rfact2 172 trn(:,:,1,jpsil) = trn(:,:,1,jpsil) + rivdsi(:,:) * rfact2 173 trn(:,:,1,jpdic) = trn(:,:,1,jpdic) + rivdic(:,:) * rfact2 174 trn(:,:,1,jptal) = trn(:,:,1,jptal) + ( rivalk(:,:) - rno3 * rivdin(:,:) ) * rfact2 163 DO jj = 1, jpj 164 DO ji = 1, jpi 165 DO jk = 1, nk_rnf(ji,jj) 166 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + rivdip(ji,jj) * rfact2 167 tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) + rivdin(ji,jj) * rfact2 168 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + rivdic(ji,jj) * 5.e-5 * rfact2 169 tra(ji,jj,jk,jpsil) = tra(ji,jj,jk,jpsil) + rivdsi(ji,jj) * rfact2 170 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + rivdic(ji,jj) * rfact2 171 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + ( rivalk(ji,jj) - rno3 * rivdin(ji,jj) ) * rfact2 172 ENDDO 173 ENDDO 174 ENDDO 175 175 ENDIF 176 176 … … 178 178 ! ---------------------------------------------------------- 179 179 IF( ln_ndepo ) THEN 180 tr n(:,:,1,jpno3) = trn(:,:,1,jpno3) + nitdep(:,:) * rfact2181 tr n(:,:,1,jptal) = trn(:,:,1,jptal) - rno3 * nitdep(:,:) * rfact2180 tra(:,:,1,jpno3) = tra(:,:,1,jpno3) + nitdep(:,:) * rfact2 181 tra(:,:,1,jptal) = tra(:,:,1,jptal) - rno3 * nitdep(:,:) * rfact2 182 182 ENDIF 183 183 … … 185 185 ! ------------------------------------------------------ 186 186 IF( ln_ironsed ) THEN 187 tr n(:,:,:,jpfer) = trn(:,:,:,jpfer) + ironsed(:,:,:) * rfact2187 tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + ironsed(:,:,:) * rfact2 188 188 ! 189 IF( lk_iomput .AND. jnt == nrdttrc .AND. iom_use( "Ironsed" ) ) &189 IF( lk_iomput .AND. knt == nrdttrc .AND. iom_use( "Ironsed" ) ) & 190 190 & CALL iom_put( "Ironsed", ironsed(:,:,:) * 1.e+3 * tmask(:,:,:) ) ! iron inputs from sediments 191 191 ENDIF … … 194 194 ! ------------------------------------------------------ 195 195 IF( ln_hydrofe ) THEN 196 tr n(:,:,:,jpfer) = trn(:,:,:,jpfer) + hydrofe(:,:,:) * rfact2196 tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + hydrofe(:,:,:) * rfact2 197 197 ! 198 IF( lk_iomput .AND. jnt == nrdttrc .AND. iom_use( "HYDR" ) ) &198 IF( lk_iomput .AND. knt == nrdttrc .AND. iom_use( "HYDR" ) ) & 199 199 & CALL iom_put( "HYDR", hydrofe(:,:,:) * 1.e+3 * tmask(:,:,:) ) ! hydrothermal iron input 200 200 ENDIF … … 222 222 ikt = mbkt(ji,jj) 223 223 # if defined key_kriest 224 zflx = tr n(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) * 1E3 * 1E6 / 1E4224 zflx = trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) * 1E3 * 1E6 / 1E4 225 225 # else 226 zflx = ( tr n(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) &227 & + tr n(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) ) * 1E3 * 1E6 / 1E4226 zflx = ( trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) & 227 & + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) ) * 1E3 * 1E6 / 1E4 228 228 #endif 229 229 zflx = LOG10( MAX( 1E-3, zflx ) ) 230 zo2 = LOG10( MAX( 10. , tr n(ji,jj,ikt,jpoxy) * 1E6 ) )231 zno3 = LOG10( MAX( 1. , tr n(ji,jj,ikt,jpno3) * 1E6 * rno3 ) )230 zo2 = LOG10( MAX( 10. , trb(ji,jj,ikt,jpoxy) * 1E6 ) ) 231 zno3 = LOG10( MAX( 1. , trb(ji,jj,ikt,jpno3) * 1E6 * rno3 ) ) 232 232 zdep = LOG10( fsdepw(ji,jj,ikt+1) ) 233 233 zdenit2d(ji,jj) = -2.2567 - 1.185 * zflx - 0.221 * zflx**2 - 0.3995 * zno3 * zo2 + 1.25 * zno3 & … … 235 235 zdenit2d(ji,jj) = 10.0**( zdenit2d(ji,jj) ) 236 236 ! 237 zflx = ( tr n(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) &238 & + tr n(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) ) * 1E6237 zflx = ( trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) & 238 & + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) ) * 1E6 239 239 zbureff(ji,jj) = 0.013 + 0.53 * zflx**2 / ( 7.0 + zflx )**2 240 240 ENDIF … … 251 251 ikt = mbkt(ji,jj) 252 252 # if defined key_kriest 253 zwork1(ji,jj) = tr n(ji,jj,ikt,jpgsi) * zwscal (ji,jj)254 zwork2(ji,jj) = tr n(ji,jj,ikt,jppoc) * zwsbio3(ji,jj)253 zwork1(ji,jj) = trb(ji,jj,ikt,jpgsi) * zwscal (ji,jj) 254 zwork2(ji,jj) = trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) 255 255 # else 256 zwork1(ji,jj) = tr n(ji,jj,ikt,jpgsi) * zwsbio4(ji,jj)257 zwork2(ji,jj) = tr n(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) + trn(ji,jj,ikt,jppoc) * zwsbio3(ji,jj)256 zwork1(ji,jj) = trb(ji,jj,ikt,jpgsi) * zwsbio4(ji,jj) 257 zwork2(ji,jj) = trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) 258 258 # endif 259 259 ! For calcite, burial efficiency is made a function of saturation 260 260 zfactcal = MIN( excess(ji,jj,ikt), 0.2 ) 261 261 zfactcal = MIN( 1., 1.3 * ( 0.2 - zfactcal ) / ( 0.4 - zfactcal ) ) 262 zwork3(ji,jj) = tr n(ji,jj,ikt,jpcal) * zwscal(ji,jj) * 2.e0 * zfactcal262 zwork3(ji,jj) = trb(ji,jj,ikt,jpcal) * zwscal(ji,jj) * 2.e0 * zfactcal 263 263 ENDIF 264 264 END DO … … 279 279 DO ji = 1, jpi 280 280 ikt = mbkt(ji,jj) 281 zdep = xstep / fse3t(ji,jj,ikt) 281 zdep = xstep / fse3t(ji,jj,ikt) 282 282 zws4 = zwsbio4(ji,jj) * zdep 283 283 zwsc = zwscal (ji,jj) * zdep 284 284 # if defined key_kriest 285 zsiloss = tr n(ji,jj,ikt,jpgsi) * zws4285 zsiloss = trb(ji,jj,ikt,jpgsi) * zws4 286 286 # else 287 zsiloss = tr n(ji,jj,ikt,jpgsi) * zwsc287 zsiloss = trb(ji,jj,ikt,jpgsi) * zwsc 288 288 # endif 289 zcaloss = tr n(ji,jj,ikt,jpcal) * zwsc289 zcaloss = trb(ji,jj,ikt,jpcal) * zwsc 290 290 ! 291 tr n(ji,jj,ikt,jpgsi) = trn(ji,jj,ikt,jpgsi) - zsiloss292 tr n(ji,jj,ikt,jpcal) = trn(ji,jj,ikt,jpcal) - zcaloss291 tra(ji,jj,ikt,jpgsi) = tra(ji,jj,ikt,jpgsi) - zsiloss 292 tra(ji,jj,ikt,jpcal) = tra(ji,jj,ikt,jpcal) - zcaloss 293 293 #if ! defined key_sed 294 tr n(ji,jj,ikt,jpsil) = trn(ji,jj,ikt,jpsil) + zsiloss * zrivsil294 tra(ji,jj,ikt,jpsil) = tra(ji,jj,ikt,jpsil) + zsiloss * zrivsil 295 295 zfactcal = MIN( excess(ji,jj,ikt), 0.2 ) 296 296 zfactcal = MIN( 1., 1.3 * ( 0.2 - zfactcal ) / ( 0.4 - zfactcal ) ) 297 297 zrivalk = 1._wp - ( rivalkinput * r1_ryyss ) * zfactcal / ( zsumsedcal + rtrn ) 298 tr n(ji,jj,ikt,jptal) = trn(ji,jj,ikt,jptal) + zcaloss * zrivalk * 2.0299 tr n(ji,jj,ikt,jpdic) = trn(ji,jj,ikt,jpdic) + zcaloss * zrivalk298 tra(ji,jj,ikt,jptal) = tra(ji,jj,ikt,jptal) + zcaloss * zrivalk * 2.0 299 tra(ji,jj,ikt,jpdic) = tra(ji,jj,ikt,jpdic) + zcaloss * zrivalk 300 300 #endif 301 301 END DO … … 304 304 DO jj = 1, jpj 305 305 DO ji = 1, jpi 306 ikt 307 zdep = xstep / fse3t(ji,jj,ikt)306 ikt = mbkt(ji,jj) 307 zdep = xstep / fse3t(ji,jj,ikt) 308 308 zws4 = zwsbio4(ji,jj) * zdep 309 309 zws3 = zwsbio3(ji,jj) * zdep 310 310 zrivno3 = 1. - zbureff(ji,jj) 311 311 # if ! defined key_kriest 312 tr n(ji,jj,ikt,jpgoc) = trn(ji,jj,ikt,jpgoc) - trn(ji,jj,ikt,jpgoc) * zws4313 tr n(ji,jj,ikt,jppoc) = trn(ji,jj,ikt,jppoc) - trn(ji,jj,ikt,jppoc) * zws3314 tr n(ji,jj,ikt,jpbfe) = trn(ji,jj,ikt,jpbfe) - trn(ji,jj,ikt,jpbfe) * zws4315 tr n(ji,jj,ikt,jpsfe) = trn(ji,jj,ikt,jpsfe) - trn(ji,jj,ikt,jpsfe) * zws3316 zwstpoc = trn(ji,jj,ikt,jpgoc) * zws4 + trn(ji,jj,ikt,jppoc) * zws3312 tra(ji,jj,ikt,jpgoc) = tra(ji,jj,ikt,jpgoc) - trb(ji,jj,ikt,jpgoc) * zws4 313 tra(ji,jj,ikt,jppoc) = tra(ji,jj,ikt,jppoc) - trb(ji,jj,ikt,jppoc) * zws3 314 tra(ji,jj,ikt,jpbfe) = tra(ji,jj,ikt,jpbfe) - trb(ji,jj,ikt,jpbfe) * zws4 315 tra(ji,jj,ikt,jpsfe) = tra(ji,jj,ikt,jpsfe) - trb(ji,jj,ikt,jpsfe) * zws3 316 zwstpoc = trb(ji,jj,ikt,jpgoc) * zws4 + trb(ji,jj,ikt,jppoc) * zws3 317 317 # else 318 tr n(ji,jj,ikt,jpnum) = trn(ji,jj,ikt,jpnum) - trn(ji,jj,ikt,jpnum) * zws4319 tr n(ji,jj,ikt,jppoc) = trn(ji,jj,ikt,jppoc) - trn(ji,jj,ikt,jppoc) * zws3320 tr n(ji,jj,ikt,jpsfe) = trn(ji,jj,ikt,jpsfe) - trn(ji,jj,ikt,jpsfe) * zws3321 zwstpoc = tr n(ji,jj,ikt,jppoc) * zws3318 tra(ji,jj,ikt,jpnum) = tra(ji,jj,ikt,jpnum) - trb(ji,jj,ikt,jpnum) * zws4 319 tra(ji,jj,ikt,jppoc) = tra(ji,jj,ikt,jppoc) - trb(ji,jj,ikt,jppoc) * zws3 320 tra(ji,jj,ikt,jpsfe) = tra(ji,jj,ikt,jpsfe) - trb(ji,jj,ikt,jpsfe) * zws3 321 zwstpoc = trb(ji,jj,ikt,jppoc) * zws3 322 322 # endif 323 323 … … 325 325 ! The 0.5 factor in zpdenit and zdenitt is to avoid negative NO3 concentration after both denitrification 326 326 ! in the sediments and just above the sediments. Not very clever, but simpliest option. 327 zpdenit = MIN( 0.5 * ( tr n(ji,jj,ikt,jpno3) - rtrn ) / rdenit, zdenit2d(ji,jj) * zwstpoc * zrivno3 )327 zpdenit = MIN( 0.5 * ( trb(ji,jj,ikt,jpno3) - rtrn ) / rdenit, zdenit2d(ji,jj) * zwstpoc * zrivno3 ) 328 328 z1pdenit = zwstpoc * zrivno3 - zpdenit 329 zolimit = MIN( ( tr n(ji,jj,ikt,jpoxy) - rtrn ) / o2ut, z1pdenit * ( 1.- nitrfac(ji,jj,ikt) ) )330 zdenitt = MIN( 0.5 * ( tr n(ji,jj,ikt,jpno3) - rtrn ) / rdenit, z1pdenit * nitrfac(ji,jj,ikt) )331 tr n(ji,jj,ikt,jpdoc) = trn(ji,jj,ikt,jpdoc) + z1pdenit - zolimit - zdenitt332 tr n(ji,jj,ikt,jppo4) = trn(ji,jj,ikt,jppo4) + zpdenit + zolimit + zdenitt333 tr n(ji,jj,ikt,jpnh4) = trn(ji,jj,ikt,jpnh4) + zpdenit + zolimit + zdenitt334 tr n(ji,jj,ikt,jpno3) = trn(ji,jj,ikt,jpno3) - rdenit * (zpdenit + zdenitt)335 tr n(ji,jj,ikt,jpoxy) = trn(ji,jj,ikt,jpoxy) - zolimit * o2ut336 tr n(ji,jj,ikt,jptal) = trn(ji,jj,ikt,jptal) + rno3 * (zolimit + (1.+rdenit) * (zpdenit + zdenitt) )337 tr n(ji,jj,ikt,jpdic) = trn(ji,jj,ikt,jpdic) + zpdenit + zolimit + zdenitt338 zwork4(ji,jj) = rdenit * zpdenit * fse3t(ji,jj,ikt)329 zolimit = MIN( ( trb(ji,jj,ikt,jpoxy) - rtrn ) / o2ut, z1pdenit * ( 1.- nitrfac(ji,jj,ikt) ) ) 330 zdenitt = MIN( 0.5 * ( trb(ji,jj,ikt,jpno3) - rtrn ) / rdenit, z1pdenit * nitrfac(ji,jj,ikt) ) 331 tra(ji,jj,ikt,jpdoc) = tra(ji,jj,ikt,jpdoc) + z1pdenit - zolimit - zdenitt 332 tra(ji,jj,ikt,jppo4) = tra(ji,jj,ikt,jppo4) + zpdenit + zolimit + zdenitt 333 tra(ji,jj,ikt,jpnh4) = tra(ji,jj,ikt,jpnh4) + zpdenit + zolimit + zdenitt 334 tra(ji,jj,ikt,jpno3) = tra(ji,jj,ikt,jpno3) - rdenit * (zpdenit + zdenitt) 335 tra(ji,jj,ikt,jpoxy) = tra(ji,jj,ikt,jpoxy) - zolimit * o2ut 336 tra(ji,jj,ikt,jptal) = tra(ji,jj,ikt,jptal) + rno3 * (zolimit + (1.+rdenit) * (zpdenit + zdenitt) ) 337 tra(ji,jj,ikt,jpdic) = tra(ji,jj,ikt,jpdic) + zpdenit + zolimit + zdenitt 338 sdenit(ji,jj) = rdenit * zpdenit * fse3t(ji,jj,ikt) 339 339 #endif 340 340 END DO … … 356 356 #endif 357 357 ztrfer = biron(ji,jj,jk) / ( concfediaz + biron(ji,jj,jk) ) 358 ztrpo4 = tr n (ji,jj,jk,jppo4) / ( concnnh4 + trn(ji,jj,jk,jppo4) )359 zlight = ( 1.- EXP( -etot (ji,jj,jk) / diazolight ) )360 znitrpot(ji,jj,jk) = MAX( 0.e0, ( 0.6 * tgfunc(ji,jj,jk) - 2.15 ) * r1_rday ) &358 ztrpo4 = trb (ji,jj,jk,jppo4) / ( concnnh4 + trb (ji,jj,jk,jppo4) ) 359 zlight = ( 1.- EXP( -etot_ndcy(ji,jj,jk) / diazolight ) ) 360 nitrpot(ji,jj,jk) = MAX( 0.e0, ( 0.6 * tgfunc(ji,jj,jk) - 2.15 ) * r1_rday ) & 361 361 & * zfact * MIN( ztrfer, ztrpo4 ) * zlight 362 362 zsoufer(ji,jj,jk) = zlight * 2E-11 / (2E-11 + biron(ji,jj,jk)) … … 370 370 DO jj = 1, jpj 371 371 DO ji = 1, jpi 372 zfact = znitrpot(ji,jj,jk) * nitrfix373 tr n(ji,jj,jk,jpnh4) = trn(ji,jj,jk,jpnh4) + zfact374 tr n(ji,jj,jk,jptal) = trn(ji,jj,jk,jptal) + rno3 * zfact375 tr n(ji,jj,jk,jpoxy) = trn(ji,jj,jk,jpoxy) + o2nit * zfact376 tr n(ji,jj,jk,jppo4) = trn(ji,jj,jk,jppo4) + concdnh4 / ( concdnh4 + trn(ji,jj,jk,jppo4) ) &377 & * 0.002 * tr n(ji,jj,jk,jpdoc) * rfact2 / rday378 tr n(ji,jj,jk,jpfer) = trn(ji,jj,jk,jpfer) + 0.002 * 4E-10 * zsoufer(ji,jj,jk) * rfact2 / rday372 zfact = nitrpot(ji,jj,jk) * nitrfix 373 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zfact 374 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zfact 375 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) + o2nit * zfact 376 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + concdnh4 / ( concdnh4 + trb(ji,jj,jk,jppo4) ) & 377 & * 0.002 * trb(ji,jj,jk,jpdoc) * xstep 378 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + 0.002 * 4E-10 * zsoufer(ji,jj,jk) * xstep 379 379 END DO 380 380 END DO 381 381 END DO 382 382 383 ! Global budget of N SMS : denitrification in the water column and in the sediment384 ! nitrogen fixation by the diazotrophs385 ! --------------------------------------------------------------------------------386 zrdenittot = glob_sum ( denitr(:,:,:) * rdenit * xnegtr(:,:,:) * cvol(:,:,:) )387 zsdenittot = glob_sum ( zwork4(:,:) * e1e2t(:,:) )388 znitrpottot = glob_sum ( znitrpot(:,:,:) * nitrfix * cvol(:,:,:) )389 zfact = 1.e+3 * rfact2r * rno3 * 14. / 1.e12 * ryyss ! conversion molC/l/kt ----> TgN/m3/year390 !391 IF( ln_check_mass .AND. ( kt == nitend .AND. jnt == nrdttrc ) .AND. ( lwp ) ) &392 & WRITE(numnit,9100) ndastp, znitrpottot * zfact , &393 & zrdenittot * zfact , &394 & zsdenittot * zfact395 !396 383 IF( lk_iomput ) THEN 397 IF( jnt == nrdttrc ) THEN384 IF( knt == nrdttrc ) THEN 398 385 zfact = 1.e+3 * rfact2r * rno3 ! conversion from molC/l/kt to molN/m3/s 399 IF( iom_use("Nfix" ) ) CALL iom_put( "Nfix" , znitrpot(:,:,:) * nitrfix * zfact * tmask(:,:,:) ) ! nitrogen fixation 400 IF( iom_use("Sdenit" ) ) CALL iom_put( "Sdenit", zwork4(:,:) * zfact * tmask(:,:,1) ) ! Nitrate reduction in the sediments 401 IF( iom_use("tnfix" ) ) CALL iom_put( "tnfix" , znitrpottot * zfact ) ! Global nitrogen fixation 402 IF( iom_use("tdenit" ) ) CALL iom_put( "tdenit" , zrdenittot * zfact ) ! Total denitrification 386 IF( iom_use("Nfix" ) ) CALL iom_put( "Nfix", nitrpot(:,:,:) * nitrfix * zfact * tmask(:,:,:) ) ! nitrogen fixation 403 387 IF( iom_use("INTNFIX") ) THEN ! nitrogen fixation rate in ocean ( vertically integrated ) 404 388 zwork1(:,:) = 0. 405 389 DO jk = 1, jpkm1 406 zwork1(:,:) = zwork1(:,:) + znitrpot(:,:,jk) * nitrfix * zfact * fse3t(:,:,jk) * tmask(:,:,jk)390 zwork1(:,:) = zwork1(:,:) + nitrpot(:,:,jk) * nitrfix * zfact * fse3t(:,:,jk) * tmask(:,:,jk) 407 391 ENDDO 408 392 CALL iom_put( "INTNFIX" , zwork1 ) … … 411 395 ELSE 412 396 IF( ln_diatrc ) & 413 & trc2d(:,:,jp_pcs0_2d + 12) = znitrpot(:,:,1) * nitrfix * rno3 * 1.e+3 * rfact2r * fse3t(:,:,1) * tmask(:,:,1)397 & trc2d(:,:,jp_pcs0_2d + 12) = nitrpot(:,:,1) * nitrfix * rno3 * 1.e+3 * rfact2r * fse3t(:,:,1) * tmask(:,:,1) 414 398 ENDIF 415 399 ! … … 417 401 WRITE(charout, fmt="('sed ')") 418 402 CALL prt_ctl_trc_info(charout) 419 CALL prt_ctl_trc(tab4d=tr n, mask=tmask, clinfo=ctrcnm)420 ENDIF 421 ! 422 CALL wrk_dealloc( jpi, jpj, zdenit2d, zwork1, zwork2, zwork3, z work4, zbureff )403 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 404 ENDIF 405 ! 406 CALL wrk_dealloc( jpi, jpj, zdenit2d, zwork1, zwork2, zwork3, zbureff ) 423 407 CALL wrk_dealloc( jpi, jpj, zwsbio3, zwsbio4, zwscal ) 424 CALL wrk_dealloc( jpi, jpj, jpk, z nitrpot, zsoufer )408 CALL wrk_dealloc( jpi, jpj, jpk, zsoufer ) 425 409 ! 426 410 IF( nn_timing == 1 ) CALL timing_stop('p4z_sed') … … 429 413 ! 430 414 END SUBROUTINE p4z_sed 415 416 417 INTEGER FUNCTION p4z_sed_alloc() 418 !!---------------------------------------------------------------------- 419 !! *** ROUTINE p4z_sed_alloc *** 420 !!---------------------------------------------------------------------- 421 ALLOCATE( nitrpot(jpi,jpj,jpk), sdenit(jpi,jpj), STAT=p4z_sed_alloc ) 422 ! 423 IF( p4z_sed_alloc /= 0 ) CALL ctl_warn('p4z_sed_alloc: failed to allocate arrays') 424 ! 425 END FUNCTION p4z_sed_alloc 426 431 427 432 428 #else -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsink.F90
r4996 r5385 79 79 !!---------------------------------------------------------------------- 80 80 81 SUBROUTINE p4z_sink ( kt, jnt )81 SUBROUTINE p4z_sink ( kt, knt ) 82 82 !!--------------------------------------------------------------------- 83 83 !! *** ROUTINE p4z_sink *** … … 88 88 !! ** Method : - ??? 89 89 !!--------------------------------------------------------------------- 90 INTEGER, INTENT(in) :: kt, jnt90 INTEGER, INTENT(in) :: kt, knt 91 91 INTEGER :: ji, jj, jk, jit 92 92 INTEGER :: iiter1, iiter2 … … 199 199 zfact = zstep * xdiss(ji,jj,jk) 200 200 ! Part I : Coagulation dependent on turbulence 201 zagg1 = 25.9 * zfact * tr n(ji,jj,jk,jppoc) * trn(ji,jj,jk,jppoc)202 zagg2 = 4452. * zfact * tr n(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpgoc)201 zagg1 = 25.9 * zfact * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jppoc) 202 zagg2 = 4452. * zfact * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpgoc) 203 203 204 204 ! Part II : Differential settling 205 205 206 206 ! Aggregation of small into large particles 207 zagg3 = 47.1 * zstep * tr n(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpgoc)208 zagg4 = 3.3 * zstep * tr n(ji,jj,jk,jppoc) * trn(ji,jj,jk,jppoc)207 zagg3 = 47.1 * zstep * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpgoc) 208 zagg4 = 3.3 * zstep * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jppoc) 209 209 210 210 zagg = zagg1 + zagg2 + zagg3 + zagg4 211 zaggfe = zagg * tr n(ji,jj,jk,jpsfe) / ( trn(ji,jj,jk,jppoc) + rtrn )211 zaggfe = zagg * trb(ji,jj,jk,jpsfe) / ( trb(ji,jj,jk,jppoc) + rtrn ) 212 212 213 213 ! Aggregation of DOC to POC : … … 215 215 ! 2nd term is shear aggregation of DOC-POC 216 216 ! 3rd term is differential settling of DOC-POC 217 zaggdoc = ( ( 0.369 * 0.3 * tr n(ji,jj,jk,jpdoc) + 102.4 * trn(ji,jj,jk,jppoc) ) * zfact &218 & + 2.4 * zstep * tr n(ji,jj,jk,jppoc) ) * 0.3 * trn(ji,jj,jk,jpdoc)217 zaggdoc = ( ( 0.369 * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4 * trb(ji,jj,jk,jppoc) ) * zfact & 218 & + 2.4 * zstep * trb(ji,jj,jk,jppoc) ) * 0.3 * trb(ji,jj,jk,jpdoc) 219 219 ! transfer of DOC to GOC : 220 220 ! 1st term is shear aggregation 221 221 ! 2nd term is differential settling 222 zaggdoc2 = ( 3.53E3 * zfact + 0.1 * zstep ) * tr n(ji,jj,jk,jpgoc) * 0.3 * trn(ji,jj,jk,jpdoc)222 zaggdoc2 = ( 3.53E3 * zfact + 0.1 * zstep ) * trb(ji,jj,jk,jpgoc) * 0.3 * trb(ji,jj,jk,jpdoc) 223 223 ! tranfer of DOC to POC due to brownian motion 224 zaggdoc3 = ( 5095. * tr n(ji,jj,jk,jppoc) + 114. * 0.3 * trn(ji,jj,jk,jpdoc) ) *zstep * 0.3 * trn(ji,jj,jk,jpdoc)224 zaggdoc3 = ( 5095. * trb(ji,jj,jk,jppoc) + 114. * 0.3 * trb(ji,jj,jk,jpdoc) ) *zstep * 0.3 * trb(ji,jj,jk,jpdoc) 225 225 226 226 ! Update the trends … … 237 237 238 238 ! Total carbon export per year 239 IF( iom_use( "tcexp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. jnt == nrdttrc ) ) &239 IF( iom_use( "tcexp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. knt == nrdttrc ) ) & 240 240 & t_oce_co2_exp = glob_sum( ( sinking(:,:,ik100) + sinking2(:,:,ik100) ) * e1e2t(:,:) * tmask(:,:,1) ) 241 241 ! 242 242 IF( lk_iomput ) THEN 243 IF( jnt == nrdttrc ) THEN243 IF( knt == nrdttrc ) THEN 244 244 CALL wrk_alloc( jpi, jpj, zw2d ) 245 245 CALL wrk_alloc( jpi, jpj, jpk, zw3d ) … … 328 328 !!---------------------------------------------------------------------- 329 329 330 SUBROUTINE p4z_sink ( kt, jnt )330 SUBROUTINE p4z_sink ( kt, knt ) 331 331 !!--------------------------------------------------------------------- 332 332 !! *** ROUTINE p4z_sink *** … … 338 338 !!--------------------------------------------------------------------- 339 339 ! 340 INTEGER, INTENT(in) :: kt, jnt340 INTEGER, INTENT(in) :: kt, knt 341 341 ! 342 342 INTEGER :: ji, jj, jk, jit, niter1, niter2 … … 373 373 DO ji = 1, jpi 374 374 IF( tmask(ji,jj,jk) /= 0.e0 ) THEN 375 znum = tr n(ji,jj,jk,jppoc) / ( trn(ji,jj,jk,jpnum) + rtrn ) / xkr_massp375 znum = trb(ji,jj,jk,jppoc) / ( trb(ji,jj,jk,jpnum) + rtrn ) / xkr_massp 376 376 ! -------------- To avoid sinking speed over 50 m/day ------- 377 377 znum = MIN( xnumm(jk), znum ) … … 435 435 IF( tmask(ji,jj,jk) /= 0.e0 ) THEN 436 436 437 znum = tr n(ji,jj,jk,jppoc)/(trn(ji,jj,jk,jpnum)+rtrn) / xkr_massp437 znum = trb(ji,jj,jk,jppoc)/(trb(ji,jj,jk,jpnum)+rtrn) / xkr_massp 438 438 !-------------- To avoid sinking speed over 50 m/day ------- 439 439 znum = min(xnumm(jk),znum) … … 453 453 ! ---------------------------------------------- 454 454 455 zagg1 = 0.163 * tr n(ji,jj,jk,jpnum)**2 &455 zagg1 = 0.163 * trb(ji,jj,jk,jpnum)**2 & 456 456 & * 2.*( (zfm-1.)*(zfm*xkr_mass_max**3-xkr_mass_min**3) & 457 457 & * (zeps-1)/zdiv1 + 3.*(zfm*xkr_mass_max-xkr_mass_min) & 458 458 & * (zfm*xkr_mass_max**2-xkr_mass_min**2) & 459 459 & * (zeps-1.)**2/(zdiv2*zdiv3)) 460 zagg2 = 2*0.163*tr n(ji,jj,jk,jpnum)**2*zfm* &460 zagg2 = 2*0.163*trb(ji,jj,jk,jpnum)**2*zfm* & 461 461 & ((xkr_mass_max**3+3.*(xkr_mass_max**2 & 462 462 & *xkr_mass_min*(zeps-1.)/zdiv2 & … … 466 466 & (zeps-2.)+(zeps-1.)/zdiv3)+(zeps-1.)/zdiv1)) 467 467 468 zagg3 = 0.163*tr n(ji,jj,jk,jpnum)**2*zfm**2*8. * xkr_mass_max**3468 zagg3 = 0.163*trb(ji,jj,jk,jpnum)**2*zfm**2*8. * xkr_mass_max**3 469 469 470 470 ! Aggregation of small into large particles … … 472 472 ! ---------------------------------------------- 473 473 474 zagg4 = 2.*3.141*0.125*tr n(ji,jj,jk,jpnum)**2* &474 zagg4 = 2.*3.141*0.125*trb(ji,jj,jk,jpnum)**2* & 475 475 & xkr_wsbio_min*(zeps-1.)**2 & 476 476 & *(xkr_mass_min**2*((1.-zsm*zfm)/(zdiv3*zdiv4) & … … 479 479 & *xkr_eta)/(zdiv*zdiv3*zdiv5) ) 480 480 481 zagg5 = 2.*3.141*0.125*tr n(ji,jj,jk,jpnum)**2 &481 zagg5 = 2.*3.141*0.125*trb(ji,jj,jk,jpnum)**2 & 482 482 & *(zeps-1.)*zfm*xkr_wsbio_min & 483 483 & *(zsm*(xkr_mass_min**2-zfm*xkr_mass_max**2) & … … 489 489 ! ------------------------------------ 490 490 491 zfract = 2.*3.141*0.125*tr n(ji,jj,jk,jpmes)*12./0.12/0.06**3*trn(ji,jj,jk,jpnum) &491 zfract = 2.*3.141*0.125*trb(ji,jj,jk,jpmes)*12./0.12/0.06**3*trb(ji,jj,jk,jpnum) & 492 492 & * (0.01/xkr_mass_min)**(1.-zeps)*0.1**2 & 493 493 & * 10000.*xstep … … 496 496 ! -------------------------------------- 497 497 498 zaggdoc = 0.83 * tr n(ji,jj,jk,jpdoc) * xstep * xdiss(ji,jj,jk) * trn(ji,jj,jk,jpdoc) &499 & + 0.005 * 231. * tr n(ji,jj,jk,jpdoc) * xstep * trn(ji,jj,jk,jpdoc)500 zaggdoc1 = 271. * tr n(ji,jj,jk,jppoc) * xstep * xdiss(ji,jj,jk) * trn(ji,jj,jk,jpdoc) &501 & + 0.02 * 16706. * tr n(ji,jj,jk,jppoc) * xstep * trn(ji,jj,jk,jpdoc)498 zaggdoc = 0.83 * trb(ji,jj,jk,jpdoc) * xstep * xdiss(ji,jj,jk) * trb(ji,jj,jk,jpdoc) & 499 & + 0.005 * 231. * trb(ji,jj,jk,jpdoc) * xstep * trb(ji,jj,jk,jpdoc) 500 zaggdoc1 = 271. * trb(ji,jj,jk,jppoc) * xstep * xdiss(ji,jj,jk) * trb(ji,jj,jk,jpdoc) & 501 & + 0.02 * 16706. * trb(ji,jj,jk,jppoc) * xstep * trb(ji,jj,jk,jpdoc) 502 502 503 503 # if defined key_degrad … … 514 514 zagg = 0.5 * xkr_stick * ( zaggsh + zaggsi ) 515 515 ! 516 znumdoc = tr n(ji,jj,jk,jpnum) / ( trn(ji,jj,jk,jppoc) + rtrn )516 znumdoc = trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn ) 517 517 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zaggdoc + zaggdoc1 518 518 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zfract + zaggdoc / xkr_massp - zagg … … 528 528 ! 529 529 IF( lk_iomput ) THEN 530 IF( jnt == nrdttrc ) THEN530 IF( knt == nrdttrc ) THEN 531 531 CALL wrk_alloc( jpi, jpj, zw2d ) 532 532 CALL wrk_alloc( jpi, jpj, jpk, zw3d ) … … 800 800 ztraz(:,:,:) = 0.e0 801 801 zakz (:,:,:) = 0.e0 802 ztrb (:,:,:) = tr n(:,:,:,jp_tra)802 ztrb (:,:,:) = trb(:,:,:,jp_tra) 803 803 804 804 DO jk = 1, jpkm1 … … 815 815 ! first guess of the slopes interior values 816 816 DO jk = 2, jpkm1 817 ztraz(:,:,jk) = ( tr n(:,:,jk-1,jp_tra) - trn(:,:,jk,jp_tra) ) * tmask(:,:,jk)817 ztraz(:,:,jk) = ( trb(:,:,jk-1,jp_tra) - trb(:,:,jk,jp_tra) ) * tmask(:,:,jk) 818 818 END DO 819 819 ztraz(:,:,1 ) = 0.0 … … 846 846 zigma = zwsink2(ji,jj,jk+1) * zstep / fse3w(ji,jj,jk+1) 847 847 zew = zwsink2(ji,jj,jk+1) 848 psinkflx(ji,jj,jk+1) = -zew * ( tr n(ji,jj,jk,jp_tra) - 0.5 * ( 1 + zigma ) * zakz(ji,jj,jk) ) * zstep848 psinkflx(ji,jj,jk+1) = -zew * ( trb(ji,jj,jk,jp_tra) - 0.5 * ( 1 + zigma ) * zakz(ji,jj,jk) ) * zstep 849 849 END DO 850 850 END DO … … 859 859 DO ji = 1, jpi 860 860 zflx = ( psinkflx(ji,jj,jk) - psinkflx(ji,jj,jk+1) ) / fse3t(ji,jj,jk) 861 tr n(ji,jj,jk,jp_tra) = trn(ji,jj,jk,jp_tra) + zflx861 trb(ji,jj,jk,jp_tra) = trb(ji,jj,jk,jp_tra) + zflx 862 862 END DO 863 863 END DO … … 875 875 END DO 876 876 877 tr n(:,:,:,jp_tra) = ztrb(:,:,:)877 trb(:,:,:,jp_tra) = ztrb(:,:,:) 878 878 psinkflx(:,:,:) = 2. * psinkflx(:,:,:) 879 879 ! -
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsms.F90
r4996 r5385 24 24 USE p4zsed ! Sedimentation 25 25 USE p4zint ! time interpolation 26 USE p4zrem ! remineralisation 26 27 USE iom ! I/O manager 27 28 USE trd_oce ! Ocean trends variables … … 36 37 PUBLIC p4z_sms ! called in p4zsms.F90 37 38 38 REAL(wp) :: alkbudget, no3budget, silbudget, ferbudget 39 INTEGER :: numco2, numnut !: logical unit for co2 budget 40 39 REAL(wp) :: alkbudget, no3budget, silbudget, ferbudget, po4budget 40 REAL(wp) :: xfact1, xfact2 41 INTEGER :: numco2, numnut, numnit !: logical unit for co2 budget 42 43 !!* Array used to indicate negative tracer values 44 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnegtr !: ??? 45 46 47 !! * Substitutions 48 # include "top_substitute.h90" 41 49 !!---------------------------------------------------------------------- 42 50 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 61 69 INTEGER, INTENT( in ) :: kt ! ocean time-step index 62 70 !! 63 INTEGER :: jnt, jn, jl 71 INTEGER :: ji, jj, jk, jnt, jn, jl 72 REAL(wp) :: ztra 73 #if defined key_kriest 74 REAL(wp) :: zcoef1, zcoef2 75 #endif 64 76 CHARACTER (len=25) :: charout 65 REAL(wp), POINTER, DIMENSION(:,:,:,:) :: ztrdpis66 77 !!--------------------------------------------------------------------- 67 78 ! 68 79 IF( nn_timing == 1 ) CALL timing_start('p4z_sms') 69 80 ! 70 IF( l_trdtrc ) THEN71 CALL wrk_alloc( jpi, jpj, jpk, jp_pisces, ztrdpis )72 DO jn = 1, jp_pisces73 jl = jn + jp_pcs0 - 174 ztrdpis(:,:,:,jn) = trn(:,:,:,jl)75 ENDDO76 ENDIF77 !78 81 IF( kt == nittrc000 ) THEN 82 ! 83 ALLOCATE( xnegtr(jpi,jpj,jpk) ) 79 84 ! 80 85 CALL p4z_che ! initialize the chemical constants … … 88 93 IF( ln_pisdmp .AND. MOD( kt - nn_dttrc, nn_pisdmp ) == 0 ) CALL p4z_dmp( kt ) ! Relaxation of some tracers 89 94 ! 95 ! ! set time step size (Euler/Leapfrog) 96 IF( ( neuler == 0 .AND. kt == nittrc000 ) .OR. ln_top_euler ) THEN ; rfact = rdttrc(1) ! at nittrc000 97 ELSEIF( kt <= nittrc000 + nn_dttrc ) THEN ; rfact = 2. * rdttrc(1) ! at nittrc000 or nittrc000+nn_dttrc (Leapfrog) 98 ENDIF 99 ! 100 IF( ( ln_top_euler .AND. kt == nittrc000 ) .OR. ( .NOT.ln_top_euler .AND. kt <= nittrc000 + nn_dttrc ) ) THEN 101 rfactr = 1. / rfact 102 rfact2 = rfact / FLOAT( nrdttrc ) 103 rfact2r = 1. / rfact2 104 xstep = rfact2 / rday ! Time step duration for biology 105 IF(lwp) WRITE(numout,*) 106 IF(lwp) WRITE(numout,*) ' Passive Tracer time step rfact = ', rfact, ' rdt = ', rdttra(1) 107 IF(lwp) write(numout,*) ' PISCES Biology time step rfact2 = ', rfact2 108 IF(lwp) WRITE(numout,*) 109 ENDIF 110 111 IF( ( neuler == 0 .AND. kt == nittrc000 ) .OR. ln_top_euler ) THEN 112 DO jn = jp_pcs0, jp_pcs1 ! SMS on tracer without Asselin time-filter 113 trb(:,:,:,jn) = trn(:,:,:,jn) 114 END DO 115 ENDIF 116 ! 90 117 IF( ndayflxtr /= nday_year ) THEN ! New days 91 118 ! … … 105 132 DO jnt = 1, nrdttrc ! Potential time splitting if requested 106 133 ! 107 CALL p4z_bio (kt, jnt) ! Biology 108 CALL p4z_sed (kt, jnt) ! Sedimentation 109 ! 134 CALL p4z_bio( kt, jnt ) ! Biology 135 CALL p4z_sed( kt, jnt ) ! Sedimentation 136 CALL p4z_lys( kt, jnt ) ! Compute CaCO3 saturation 137 CALL p4z_flx( kt, jnt ) ! Compute surface fluxes 138 ! 139 xnegtr(:,:,:) = 1.e0 110 140 DO jn = jp_pcs0, jp_pcs1 111 trb(:,:,:,jn) = trn(:,:,:,jn) 112 ENDDO 113 ! 141 DO jk = 1, jpk 142 DO jj = 1, jpj 143 DO ji = 1, jpi 144 IF( ( trb(ji,jj,jk,jn) + tra(ji,jj,jk,jn) ) < 0.e0 ) THEN 145 ztra = ABS( trb(ji,jj,jk,jn) ) / ( ABS( tra(ji,jj,jk,jn) ) + rtrn ) 146 xnegtr(ji,jj,jk) = MIN( xnegtr(ji,jj,jk), ztra ) 147 ENDIF 148 END DO 149 END DO 150 END DO 151 END DO 152 ! ! where at least 1 tracer concentration becomes negative 153 ! ! 154 DO jn = jp_pcs0, jp_pcs1 155 trb(:,:,:,jn) = trb(:,:,:,jn) + xnegtr(:,:,:) * tra(:,:,:,jn) 156 END DO 157 ! 158 DO jn = jp_pcs0, jp_pcs1 159 tra(:,:,:,jn) = 0._wp 160 END DO 161 ! 162 IF( ln_top_euler ) THEN 163 DO jn = jp_pcs0, jp_pcs1 164 trn(:,:,:,jn) = trb(:,:,:,jn) 165 END DO 166 ENDIF 114 167 END DO 115 168 116 IF( l_trdtrc ) THEN 117 DO jn = 1, jp_pisces 118 jl = jn + jp_pcs0 - 1 119 ztrdpis(:,:,:,jn) = ( ztrdpis(:,:,:,jn) - trn(:,:,:,jl) ) * rfact2r 120 ENDDO 121 ENDIF 122 CALL p4z_lys( kt ) ! Compute CaCO3 saturation 123 CALL p4z_flx( kt ) ! Compute surface fluxes 124 125 DO jn = jp_pcs0, jp_pcs1 126 CALL lbc_lnk( trn(:,:,:,jn), 'T', 1. ) 127 CALL lbc_lnk( trb(:,:,:,jn), 'T', 1. ) 128 CALL lbc_lnk( tra(:,:,:,jn), 'T', 1. ) 169 #if defined key_kriest 170 ! 171 zcoef1 = 1.e0 / xkr_massp 172 zcoef2 = 1.e0 / xkr_massp / 1.1 173 DO jk = 1,jpkm1 174 trb(:,:,jk,jpnum) = MAX( trb(:,:,jk,jpnum), trb(:,:,jk,jppoc) * zcoef1 / xnumm(jk) ) 175 trb(:,:,jk,jpnum) = MIN( trb(:,:,jk,jpnum), trb(:,:,jk,jppoc) * zcoef2 ) 129 176 END DO 130 177 ! 178 #endif 179 ! 180 ! 181 IF( l_trdtrc ) THEN 182 DO jn = jp_pcs0, jp_pcs1 183 CALL trd_trc( tra(:,:,:,jn), jn, jptra_sms, kt ) ! save trends 184 END DO 185 END IF 186 ! 131 187 IF( lk_sed ) THEN 132 188 ! … … 134 190 ! 135 191 DO jn = jp_pcs0, jp_pcs1 136 CALL lbc_lnk( tr n(:,:,:,jn), 'T', 1. )192 CALL lbc_lnk( trb(:,:,:,jn), 'T', 1. ) 137 193 END DO 138 194 ! … … 141 197 IF( lrst_trc ) CALL p4z_rst( kt, 'WRITE' ) !* Write PISCES informations in restart file 142 198 ! 143 IF( l_trdtrc ) THEN 144 DO jn = 1, jp_pisces 145 jl = jn + jp_pcs0 - 1 146 ztrdpis(:,:,:,jn) = ztrdpis(:,:,:,jn) + tra(:,:,:,jl) 147 CALL trd_trc( ztrdpis(:,:,:,jn), jn, jptra_sms, kt ) ! save trends 148 END DO 149 CALL wrk_dealloc( jpi, jpj, jpk, jp_pisces, ztrdpis ) 150 END IF 151 ! 199 152 200 IF( lk_iomput .OR. ln_check_mass ) CALL p4z_chk_mass( kt ) ! Mass conservation checking 153 201 … … 280 328 ztmas = tmask(ji,jj,jk) 281 329 ztmas1 = 1. - tmask(ji,jj,jk) 282 zcaralk = tr n(ji,jj,jk,jptal) - borat(ji,jj,jk) / ( 1. + 1.E-8 / ( rtrn + akb3(ji,jj,jk) ) )283 zco3 = ( zcaralk - tr n(ji,jj,jk,jpdic) ) * ztmas + 0.5e-3 * ztmas1284 zbicarb = ( 2. * tr n(ji,jj,jk,jpdic) - zcaralk )330 zcaralk = trb(ji,jj,jk,jptal) - borat(ji,jj,jk) / ( 1. + 1.E-8 / ( rtrn + akb3(ji,jj,jk) ) ) 331 zco3 = ( zcaralk - trb(ji,jj,jk,jpdic) ) * ztmas + 0.5e-3 * ztmas1 332 zbicarb = ( 2. * trb(ji,jj,jk,jpdic) - zcaralk ) 285 333 hi(ji,jj,jk) = ( ak23(ji,jj,jk) * zbicarb / zco3 ) * ztmas + 1.e-9 * ztmas1 286 334 END DO … … 361 409 REAL(wp) :: silmean = 91.51 ! mean value of silicate 362 410 ! 363 REAL(wp) :: zarea, zalksum, zpo4sum, zno3sum, zsilsum 411 REAL(wp) :: zarea, zalksumn, zpo4sumn, zno3sumn, zsilsumn 412 REAL(wp) :: zalksumb, zpo4sumb, zno3sumb, zsilsumb 364 413 !!--------------------------------------------------------------------- 365 414 … … 374 423 zarea = 1._wp / glob_sum( cvol(:,:,:) ) * 1e6 375 424 376 zalksum = glob_sum( trn(:,:,:,jptal) * cvol(:,:,:) ) * zarea377 zpo4sum = glob_sum( trn(:,:,:,jppo4) * cvol(:,:,:) ) * zarea * po4r378 zno3sum = glob_sum( trn(:,:,:,jpno3) * cvol(:,:,:) ) * zarea * rno3379 zsilsum = glob_sum( trn(:,:,:,jpsil) * cvol(:,:,:) ) * zarea425 zalksumn = glob_sum( trn(:,:,:,jptal) * cvol(:,:,:) ) * zarea 426 zpo4sumn = glob_sum( trn(:,:,:,jppo4) * cvol(:,:,:) ) * zarea * po4r 427 zno3sumn = glob_sum( trn(:,:,:,jpno3) * cvol(:,:,:) ) * zarea * rno3 428 zsilsumn = glob_sum( trn(:,:,:,jpsil) * cvol(:,:,:) ) * zarea 380 429 381 IF(lwp) WRITE(numout,*) ' TALK mean : ', zalksum 382 trn(:,:,:,jptal) = trn(:,:,:,jptal) * alkmean / zalksum 383 384 IF(lwp) WRITE(numout,*) ' PO4 mean : ', zpo4sum 385 trn(:,:,:,jppo4) = trn(:,:,:,jppo4) * po4mean / zpo4sum 386 387 IF(lwp) WRITE(numout,*) ' NO3 mean : ', zno3sum 388 trn(:,:,:,jpno3) = trn(:,:,:,jpno3) * no3mean / zno3sum 389 390 IF(lwp) WRITE(numout,*) ' SiO3 mean : ', zsilsum 391 trn(:,:,:,jpsil) = MIN( 400.e-6,trn(:,:,:,jpsil) * silmean / zsilsum ) 392 ! 393 ENDIF 394 430 IF(lwp) WRITE(numout,*) ' TALKN mean : ', zalksumn 431 trn(:,:,:,jptal) = trn(:,:,:,jptal) * alkmean / zalksumn 432 433 IF(lwp) WRITE(numout,*) ' PO4N mean : ', zpo4sumn 434 trn(:,:,:,jppo4) = trn(:,:,:,jppo4) * po4mean / zpo4sumn 435 436 IF(lwp) WRITE(numout,*) ' NO3N mean : ', zno3sumn 437 trn(:,:,:,jpno3) = trn(:,:,:,jpno3) * no3mean / zno3sumn 438 439 IF(lwp) WRITE(numout,*) ' SiO3N mean : ', zsilsumn 440 trn(:,:,:,jpsil) = MIN( 400.e-6,trn(:,:,:,jpsil) * silmean / zsilsumn ) 441 ! 442 ! 443 IF( .NOT. ln_top_euler ) THEN 444 zalksumb = glob_sum( trb(:,:,:,jptal) * cvol(:,:,:) ) * zarea 445 zpo4sumb = glob_sum( trb(:,:,:,jppo4) * cvol(:,:,:) ) * zarea * po4r 446 zno3sumb = glob_sum( trb(:,:,:,jpno3) * cvol(:,:,:) ) * zarea * rno3 447 zsilsumb = glob_sum( trb(:,:,:,jpsil) * cvol(:,:,:) ) * zarea 448 449 IF(lwp) WRITE(numout,*) ' ' 450 IF(lwp) WRITE(numout,*) ' TALKB mean : ', zalksumb 451 trb(:,:,:,jptal) = trb(:,:,:,jptal) * alkmean / zalksumb 452 453 IF(lwp) WRITE(numout,*) ' PO4B mean : ', zpo4sumb 454 trb(:,:,:,jppo4) = trb(:,:,:,jppo4) * po4mean / zpo4sumb 455 456 IF(lwp) WRITE(numout,*) ' NO3B mean : ', zno3sumb 457 trb(:,:,:,jpno3) = trb(:,:,:,jpno3) * no3mean / zno3sumb 458 459 IF(lwp) WRITE(numout,*) ' SiO3B mean : ', zsilsumb 460 trb(:,:,:,jpsil) = MIN( 400.e-6,trb(:,:,:,jpsil) * silmean / zsilsumb ) 461 ENDIF 462 ! 463 ENDIF 464 ! 395 465 END SUBROUTINE p4z_dmp 396 466 … … 406 476 INTEGER , INTENT( in ) :: kt ! ocean time-step index 407 477 REAL(wp) :: zfact 408 !! 478 REAL(wp) :: zrdenittot, zsdenittot, znitrpottot 479 CHARACTER(LEN=100) :: cltxt 480 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zvol 481 INTEGER :: jk 482 !!---------------------------------------------------------------------- 483 484 ! 409 485 !!--------------------------------------------------------------------- 410 486 … … 413 489 CALL ctl_opn( numco2, 'carbon.budget' , 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 414 490 CALL ctl_opn( numnut, 'nutrient.budget', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 491 CALL ctl_opn( numnit, 'nitrogen.budget', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 492 xfact1 = rfact2r * 12. / 1.e15 * ryyss ! conversion molC/kt --> PgC/yr 493 xfact2 = 1.e+3 * rno3 * 14. / 1.e12 * ryyss ! conversion molC/l/s ----> TgN/m3/yr 494 cltxt='time-step Alkalinity Nitrate Phosphorus Silicate Iron'