MODULE flxmod !!====================================================================== !! *** MODULE flxmod *** !! Ocean forcing: thermohaline forcing of the ocean !!===================================================================== !! * Modules used USE oce ! ocean dynamics and tracers USE dom_oce ! ocean space and time domain USE phycst ! physical constants USE in_out_manager ! I/O manager USE lib_mpp ! distribued memory computing library USE lbclnk ! ocean lateral boundary conditions (or mpp link) USE daymod ! calendar USE ocfzpt ! ocean freezing point #if defined key_oasis3 || defined key_oasis4 #if defined key_oasis3 USE cpl_oasis3 ! OASIS3 coupling (to ECHAM5) #elif defined key_oasis4 USE cpl_oasis4 ! OASIS4 coupling (to ECHAM5) #endif USE flx_oce, only : dqns_ice , & ! : derivative of non solar heat flux on sea ice qsr_oce , & ! : solar flux over ocean qnsr_oce , & ! : total non solar heat flux (longwave downward radiation) over ocean qsr_ice , & ! : solar flux over ice qnsr_ice , & ! : total non solar heat flux (Longwave downward radiation) over ice tn_ice , & ! : ice surface temperature alb_ice , & ! : albedo of ice sprecip , & ! : solid (snow) precipitation over water (!) what about ice? tprecip , & ! : total precipitation ( or liquid precip minus evaporation in coupled mode) calving , & ! : calving rrunoff , & ! : monthly runoff (kg/m2/s) fr1_i0 , & ! : 1st part of the fraction of sol.rad. which penetrate inside the ice cover fr2_i0 ! : 2nd part of the fraction of sol.rad. which penetrate inside the ice cover USE ice, only : hicif , & ! : ice thickness frld , & ! : leads fraction = 1-a/totalarea hsnif , & ! : snow thickness u_ice , v_ice ! : ice velocity USE ice_oce, only : sst_io ! : sea surface temperature #if defined key_cpl_ocevel USE geo2ocean, only : repere, repcmo #endif #endif IMPLICIT NONE PRIVATE #if defined key_flx_core LOGICAL, PUBLIC :: lk_core = .TRUE. !: CORE surface fluxes flag #else LOGICAL, PUBLIC :: lk_core = .FALSE. !: CORE surface fluxes flag #endif #if defined key_oasis3 || defined key_oasis4 REAL(wp), DIMENSION(jpi,jpj) :: catm #endif !! * Routine accessibility PUBLIC flx ! routine called by step.F90 PUBLIC flx_init ! routine called by opa.F90 !! * local declarations REAL(wp), PUBLIC :: & !!! surface fluxes namelist (namflx) q0 = 0.e0, & ! net heat flux qsr0 = 0.e0, & ! solar heat flux emp0 = 0.e0, & ! net freshwater flux dqdt0 = -40., & ! coefficient for SST damping (W/m2/K) deds0 = 27.7 ! coefficient for SSS damping (mm/day) !! * Substitutions # include "domzgr_substitute.h90" !!---------------------------------------------------------------------- !! OPA 9.0 , LOCEAN-IPSL (2005) !! $Header$ !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt !!---------------------------------------------------------------------- #if defined key_flx_bulk_monthly !!---------------------------------------------------------------------- !! 'key_flx_bulk_monthly' and MONTHLY bulk !! Default option Net CDF file !!---------------------------------------------------------------------- # include "flx_bulk_monthly.h90" #elif defined key_flx_bulk_daily !!---------------------------------------------------------------------- !! 'key_flx_bulk_daily' DAILY bulk !! Net CDF file !!---------------------------------------------------------------------- # include "flx_bulk_daily.h90" #elif defined key_flx_core !!---------------------------------------------------------------------- !! 'key_flx_core' and NCAR data (Large & Yeager) !! Net CDF file !!---------------------------------------------------------------------- # include "flx_core.h90" #elif defined key_flx_forced_daily !!---------------------------------------------------------------------- !! 'key_flx_forced_daily' DAILY fluxes !! Net CDF file !!---------------------------------------------------------------------- # include "flx_forced_daily.h90" #elif defined key_oasis3 || defined key_oasis4 !!---------------------------------------------------------------------- !! 'key_oasis3' or 'key_oasis4' and Coupled Ocan/Atmosphere !! 'key_ice_lim' with LIM sea-ice model !!---------------------------------------------------------------------- # include "flx_oasis_ice.h90" #else !!---------------------------------------------------------------------- !! Default option Analytical forcing !!---------------------------------------------------------------------- !! flx : define the thermohaline fluxes for the ocean !!---------------------------------------------------------------------- !! * Module used !!---------------------------------------------------------------------- CONTAINS SUBROUTINE flx ( kt ) !!--------------------------------------------------------------------- !! *** ROUTINE flx *** !! !! ** Purpose : provide the thermohaline fluxes (heat and freshwater) !! to the ocean at each time step. !! !! ** Method : Constant surface fluxes (read in namelist (namflx)) !! !! ** Action : - q, qt, qsr, emp, emps, qrp, erp !! !! History : !! ! 91-03 () Original code !! 8.5 ! 02-09 (G. Madec) F90: Free form and module !!---------------------------------------------------------------------- !! * arguments INTEGER, INTENT( in ) :: kt ! ocean time step !!--------------------------------------------------------------------- IF( kt == nit000 ) THEN IF(lwp) WRITE(numout,*)' ' IF(lwp) WRITE(numout,*)'flx : Analytical/Constant surface fluxes' IF(lwp) WRITE(numout,*)'~~~~~~~ ' IF(lwp) WRITE(numout,*)' See the routine oce_sbc' IF(lwp) WRITE(numout,*)' ' ENDIF END SUBROUTINE flx #endif SUBROUTINE flx_init !!--------------------------------------------------------------------- !! *** ROUTINE flx *** !! !! ** Purpose : provide the thermohaline fluxes (heat and freshwater) !! to the ocean at each time step. !! !! ** Method : Constant surface fluxes (read in namelist (namflx)) !! !! ** Action : - q, qt, qsr, emp, emps, qrp, erp !! !! History : !! ! 91-03 () Original code !! 8.5 ! 02-09 (G. Madec) F90: Free form and module !!---------------------------------------------------------------------- NAMELIST/namflx/ q0, qsr0, emp0, dqdt0, deds0 !!--------------------------------------------------------------------- ! Read Namelist namflx : surface thermohaline fluxes ! -------------------- REWIND ( numnam ) READ ( numnam, namflx ) IF(lwp) THEN WRITE(numout,*)' ' WRITE(numout,*)'flx_init : thermohaline forcing ' WRITE(numout,*)'~~~~~~~~ ' WRITE(numout,*)' net heat flux q0 = ', q0 , ' W/m2' WRITE(numout,*)' solar heat flux qsr0 = ', qsr0, ' W/m2' WRITE(numout,*)' net heat flux emp0 = ', emp0, ' W/m2' WRITE(numout,*)' coefficient for SST damping dqdt0 = ', dqdt0,' W/m2/K' WRITE(numout,*)' coefficient for SSS damping deds0 = ', deds0,' mm/day' ENDIF END SUBROUTINE flx_init END MODULE flxmod