New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 5989 for branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90 – NEMO

Ignore:
Timestamp:
2015-12-03T09:10:32+01:00 (8 years ago)
Author:
deazer
Message:

Merging TMB and 25h diagnostics to head of trunk
added brief documentation

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90

    r5260 r5989  
    2424   USE phycst           ! physical constants 
    2525   USE sbc_oce          ! Surface boundary condition: ocean fields 
     26   USE trc_oce          ! shared ocean-passive tracers variables 
    2627   USE sbc_ice          ! Surface boundary condition: ice fields 
    2728   USE sbcdcy           ! surface boundary condition: diurnal cycle 
    2829   USE sbcssm           ! surface boundary condition: sea-surface mean variables 
    29    USE sbcapr           ! surface boundary condition: atmospheric pressure 
    3030   USE sbcana           ! surface boundary condition: analytical formulation 
    3131   USE sbcflx           ! surface boundary condition: flux formulation 
     
    3838   USE sbcice_cice      ! surface boundary condition: CICE    sea-ice model 
    3939   USE sbccpl           ! surface boundary condition: coupled florulation 
     40   USE cpl_oasis3       ! OASIS routines for coupling 
    4041   USE sbcssr           ! surface boundary condition: sea surface restoring 
    4142   USE sbcrnf           ! surface boundary condition: runoffs 
     
    5152   USE timing           ! Timing 
    5253   USE sbcwave          ! Wave module 
     54   USE bdy_par          ! Require lk_bdy 
    5355 
    5456   IMPLICIT NONE 
     
    8385      INTEGER ::   icpt   ! local integer 
    8486      !! 
    85       NAMELIST/namsbc/ nn_fsbc   , ln_ana    , ln_flx,  ln_blk_clio, ln_blk_core,           & 
    86          &             ln_blk_mfs, ln_apr_dyn, nn_ice,  nn_ice_embd, ln_dm2dc   , ln_rnf,   & 
    87          &             ln_ssr    ,  nn_isf , nn_fwb    , ln_cdgw , ln_wave , ln_sdw, nn_lsm, nn_limflx 
     87      NAMELIST/namsbc/ nn_fsbc   , ln_ana    , ln_flx, ln_blk_clio, ln_blk_core, ln_mixcpl,   & 
     88         &             ln_blk_mfs, ln_apr_dyn, nn_ice, nn_ice_embd, ln_dm2dc   , ln_rnf   ,   & 
     89         &             ln_ssr    , nn_isf    , nn_fwb, ln_cdgw    , ln_wave    , ln_sdw   ,   & 
     90         &             nn_lsm    , nn_limflx , nn_components, ln_cpl 
    8891      INTEGER  ::   ios 
     92      INTEGER  ::   ierr, ierr0, ierr1, ierr2, ierr3, jpm 
     93      LOGICAL  ::   ll_purecpl 
    8994      !!---------------------------------------------------------------------- 
    9095 
     
    114119          nn_ice      =   0 
    115120      ENDIF 
    116       
     121 
    117122      IF(lwp) THEN               ! Control print 
    118123         WRITE(numout,*) '        Namelist namsbc (partly overwritten with CPP key setting)' 
     
    124129         WRITE(numout,*) '              CORE bulk  formulation                     ln_blk_core = ', ln_blk_core 
    125130         WRITE(numout,*) '              MFS  bulk  formulation                     ln_blk_mfs  = ', ln_blk_mfs 
    126          WRITE(numout,*) '              coupled    formulation (T if key_oasis3)   lk_cpl      = ', lk_cpl 
     131         WRITE(numout,*) '              ocean-atmosphere coupled formulation       ln_cpl      = ', ln_cpl 
     132         WRITE(numout,*) '              forced-coupled mixed formulation           ln_mixcpl   = ', ln_mixcpl 
     133         WRITE(numout,*) '              OASIS coupling (with atm or sas)           lk_oasis    = ', lk_oasis 
     134         WRITE(numout,*) '              components of your executable            nn_components = ', nn_components 
    127135         WRITE(numout,*) '              Multicategory heat flux formulation (LIM3) nn_limflx   = ', nn_limflx 
    128136         WRITE(numout,*) '           Misc. options of sbc : ' 
     
    151159      END SELECT 
    152160      ! 
    153 #if defined key_top && ! defined key_offline 
    154       ltrcdm2dc = (ln_dm2dc .AND. ln_blk_core .AND. nn_ice==2) 
    155       IF( ltrcdm2dc )THEN 
    156          IF(lwp)THEN 
    157             WRITE(numout,*)"analytical diurnal cycle, core bulk formulation and LIM2 use: " 
    158             WRITE(numout,*)"Diurnal cycle on physics but not in passive tracers" 
    159          ENDIF 
    160       ENDIF 
    161 #else  
    162       ltrcdm2dc =  .FALSE. 
    163 #endif 
    164  
    165       ! 
     161      IF ( nn_components /= jp_iam_nemo .AND. .NOT. lk_oasis )   & 
     162         &      CALL ctl_stop( 'STOP', 'sbc_init : OPA-SAS coupled via OASIS, but key_oasis3 disabled' ) 
     163      IF ( nn_components == jp_iam_opa .AND. ln_cpl )   & 
     164         &      CALL ctl_stop( 'STOP', 'sbc_init : OPA-SAS coupled via OASIS, but ln_cpl = T in OPA' ) 
     165      IF ( nn_components == jp_iam_opa .AND. ln_mixcpl )   & 
     166         &      CALL ctl_stop( 'STOP', 'sbc_init : OPA-SAS coupled via OASIS, but ln_mixcpl = T in OPA' ) 
     167      IF ( ln_cpl .AND. .NOT. lk_oasis )    & 
     168         &      CALL ctl_stop( 'STOP', 'sbc_init : OASIS-coupled atmosphere model, but key_oasis3 disabled' ) 
     169      IF( ln_mixcpl .AND. .NOT. lk_oasis )    & 
     170         &      CALL ctl_stop( 'the forced-coupled mixed mode (ln_mixcpl) requires the cpp key key_oasis3' ) 
     171      IF( ln_mixcpl .AND. .NOT. ln_cpl )    & 
     172         &      CALL ctl_stop( 'the forced-coupled mixed mode (ln_mixcpl) requires ln_cpl = T' ) 
     173      IF( ln_mixcpl .AND. nn_components /= jp_iam_nemo )    & 
     174         &      CALL ctl_stop( 'the forced-coupled mixed mode (ln_mixcpl) is not yet working with sas-opa coupling via oasis' ) 
     175 
    166176      !                              ! allocate sbc arrays 
    167       IF( sbc_oce_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'sbc_init : unable to allocate sbc_oce arrays' ) 
     177      IF( sbc_oce_alloc() /= 0 )   CALL ctl_stop( 'sbc_init : unable to allocate sbc_oce arrays' ) 
    168178 
    169179      !                          ! Checks: 
    170       IF( .NOT. ln_rnf ) THEN                      ! no specific treatment in vicinity of river mouths  
    171          ln_rnf_mouth  = .false.                       
    172          IF( sbc_rnf_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'sbc_init : unable to allocate sbc_rnf arrays' ) 
    173          nkrnf         = 0 
    174          rnf     (:,:) = 0.0_wp 
    175          rnf_b   (:,:) = 0.0_wp 
    176          rnfmsk  (:,:) = 0.0_wp 
    177          rnfmsk_z(:)   = 0.0_wp 
    178       ENDIF 
    179       IF( nn_isf .EQ. 0 ) THEN                      ! no specific treatment in vicinity of ice shelf  
    180          IF( sbc_isf_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'sbc_init : unable to allocate sbc_isf arrays' ) 
    181          fwfisf  (:,:) = 0.0_wp 
    182          fwfisf_b(:,:) = 0.0_wp 
     180      IF( nn_isf .EQ. 0 ) THEN                      ! variable initialisation if no ice shelf  
     181         IF( sbc_isf_alloc() /= 0 )   CALL ctl_stop( 'sbc_init : unable to allocate sbc_isf arrays' ) 
     182         fwfisf  (:,:)   = 0.0_wp ; fwfisf_b  (:,:)   = 0.0_wp 
     183         risf_tsc(:,:,:) = 0.0_wp ; risf_tsc_b(:,:,:) = 0.0_wp 
     184         rdivisf       = 0.0_wp 
    183185      END IF 
    184       IF( nn_ice == 0  )   fr_i(:,:) = 0.e0        ! no ice in the domain, ice fraction is always zero 
     186      IF( nn_ice == 0 .AND. nn_components /= jp_iam_opa )   fr_i(:,:) = 0.e0 ! no ice in the domain, ice fraction is always zero 
    185187 
    186188      sfx(:,:) = 0.0_wp                            ! the salt flux due to freezing/melting will be computed (i.e. will be non-zero)  
     
    192194 
    193195      !                                            ! restartability    
    194       IF( MOD( nitend - nit000 + 1, nn_fsbc) /= 0 .OR.   & 
    195           MOD( nstock             , nn_fsbc) /= 0 ) THEN  
    196          WRITE(ctmp1,*) 'experiment length (', nitend - nit000 + 1, ') or nstock (', nstock,   & 
    197             &           ' is NOT a multiple of nn_fsbc (', nn_fsbc, ')' 
    198          CALL ctl_stop( ctmp1, 'Impossible to properly do model restart' ) 
    199       ENDIF 
    200       ! 
    201       IF( MOD( rday, REAL(nn_fsbc, wp) * rdt ) /= 0 )   & 
    202          &  CALL ctl_warn( 'nn_fsbc is NOT a multiple of the number of time steps in a day' ) 
    203       ! 
    204       IF( ( nn_ice == 2 .OR. nn_ice ==3 ) .AND. .NOT.( ln_blk_clio .OR. ln_blk_core .OR. lk_cpl ) )   & 
     196      IF( ( nn_ice == 2 .OR. nn_ice ==3 ) .AND. .NOT.( ln_blk_clio .OR. ln_blk_core .OR. ln_cpl ) )   & 
    205197         &   CALL ctl_stop( 'LIM sea-ice model requires a bulk formulation or coupled configuration' ) 
    206       IF( nn_ice == 4 .AND. .NOT.( ln_blk_core .OR. lk_cpl ) )   & 
    207          &   CALL ctl_stop( 'CICE sea-ice model requires ln_blk_core or lk_cpl' ) 
     198      IF( nn_ice == 4 .AND. .NOT.( ln_blk_core .OR. ln_cpl ) )   & 
     199         &   CALL ctl_stop( 'CICE sea-ice model requires ln_blk_core or ln_cpl' ) 
    208200      IF( nn_ice == 4 .AND. lk_agrif )   & 
    209201         &   CALL ctl_stop( 'CICE sea-ice model not currently available with AGRIF' ) 
     
    212204      IF( ( nn_ice /= 3 ) .AND. ( nn_limflx >= 0 ) )   & 
    213205         &   WRITE(numout,*) 'The nn_limflx>=0 option has no effect if sea ice model is not LIM3' 
    214       IF( ( nn_ice == 3 ) .AND. ( lk_cpl ) .AND. ( ( nn_limflx == -1 ) .OR. ( nn_limflx == 1 ) ) )   & 
     206      IF( ( nn_ice == 3 ) .AND. ( ln_cpl ) .AND. ( ( nn_limflx == -1 ) .OR. ( nn_limflx == 1 ) ) )   & 
    215207         &   CALL ctl_stop( 'The chosen nn_limflx for LIM3 in coupled mode must be 0 or 2' ) 
    216       IF( ( nn_ice == 3 ) .AND. ( .NOT. lk_cpl ) .AND. ( nn_limflx == 2 ) )   & 
     208      IF( ( nn_ice == 3 ) .AND. ( .NOT. ln_cpl ) .AND. ( nn_limflx == 2 ) )   & 
    217209         &   CALL ctl_stop( 'The chosen nn_limflx for LIM3 in forced mode cannot be 2' ) 
    218210 
    219211      IF( ln_dm2dc )   nday_qsr = -1   ! initialisation flag 
    220212 
    221       IF( ln_dm2dc .AND. .NOT.( ln_flx .OR. ln_blk_core ) )   & 
     213      IF( ln_dm2dc .AND. .NOT.( ln_flx .OR. ln_blk_core ) .AND. nn_components /= jp_iam_opa )   & 
    222214         &   CALL ctl_stop( 'diurnal cycle into qsr field from daily values requires a flux or core-bulk formulation' ) 
    223215       
    224       IF( ln_dm2dc .AND. ( ( NINT(rday) / ( nn_fsbc * NINT(rdt) ) )  < 8 ) )   & 
    225          &   CALL ctl_warn( 'diurnal cycle for qsr: the sampling of the diurnal cycle is too small...' ) 
    226  
    227216      IF ( ln_wave ) THEN 
    228217      !Activated wave module but neither drag nor stokes drift activated 
     
    234223         ENDIF 
    235224      ELSE 
    236       IF ( ln_cdgw .OR. ln_sdw  )                                         &  
    237          &   CALL ctl_stop('Not Activated Wave Module (ln_wave=F) but     & 
    238          & asked coupling with drag coefficient (ln_cdgw =T) or Stokes drift (ln_sdw=T) ') 
     225      IF ( ln_cdgw .OR. ln_sdw  )                                                           &  
     226         &   CALL ctl_stop( 'Not Activated Wave Module (ln_wave=F) but asked coupling ',    & 
     227         &                  'with drag coefficient (ln_cdgw =T) or Stokes drift (ln_sdw=T) ') 
    239228      ENDIF  
    240        
    241229      !                          ! Choice of the Surface Boudary Condition (set nsbc) 
     230      ll_purecpl = ln_cpl .AND. .NOT. ln_mixcpl 
     231      ! 
    242232      icpt = 0 
    243       IF( ln_ana          ) THEN   ;   nsbc = jp_ana    ; icpt = icpt + 1   ;   ENDIF       ! analytical      formulation 
    244       IF( ln_flx          ) THEN   ;   nsbc = jp_flx    ; icpt = icpt + 1   ;   ENDIF       ! flux            formulation 
    245       IF( ln_blk_clio     ) THEN   ;   nsbc = jp_clio   ; icpt = icpt + 1   ;   ENDIF       ! CLIO bulk       formulation 
    246       IF( ln_blk_core     ) THEN   ;   nsbc = jp_core   ; icpt = icpt + 1   ;   ENDIF       ! CORE bulk       formulation 
    247       IF( ln_blk_mfs      ) THEN   ;   nsbc = jp_mfs    ; icpt = icpt + 1   ;   ENDIF       ! MFS  bulk       formulation 
    248       IF( lk_cpl          ) THEN   ;   nsbc = jp_cpl    ; icpt = icpt + 1   ;   ENDIF       ! Coupled         formulation 
    249       IF( cp_cfg == 'gyre') THEN   ;   nsbc = jp_gyre                       ;   ENDIF       ! GYRE analytical formulation 
    250       IF( lk_esopa        )            nsbc = jp_esopa                                      ! esopa test, ALL formulations 
    251       ! 
    252       IF( icpt /= 1 .AND. .NOT.lk_esopa ) THEN 
    253          WRITE(numout,*) 
    254          WRITE(numout,*) '           E R R O R in setting the sbc, one and only one namelist/CPP key option ' 
    255          WRITE(numout,*) '                     must be choosen. You choose ', icpt, ' option(s)' 
    256          WRITE(numout,*) '                     We stop' 
    257          nstop = nstop + 1 
    258       ENDIF 
     233      IF( ln_ana          ) THEN   ;   nsbc = jp_ana     ; icpt = icpt + 1   ;   ENDIF       ! analytical           formulation 
     234      IF( ln_flx          ) THEN   ;   nsbc = jp_flx     ; icpt = icpt + 1   ;   ENDIF       ! flux                 formulation 
     235      IF( ln_blk_clio     ) THEN   ;   nsbc = jp_clio    ; icpt = icpt + 1   ;   ENDIF       ! CLIO bulk            formulation 
     236      IF( ln_blk_core     ) THEN   ;   nsbc = jp_core    ; icpt = icpt + 1   ;   ENDIF       ! CORE bulk            formulation 
     237      IF( ln_blk_mfs      ) THEN   ;   nsbc = jp_mfs     ; icpt = icpt + 1   ;   ENDIF       ! MFS  bulk            formulation 
     238      IF( ll_purecpl      ) THEN   ;   nsbc = jp_purecpl ; icpt = icpt + 1   ;   ENDIF       ! Pure Coupled         formulation 
     239      IF( cp_cfg == 'gyre') THEN   ;   nsbc = jp_gyre                        ;   ENDIF       ! GYRE analytical      formulation 
     240      IF( nn_components == jp_iam_opa )   & 
     241         &                  THEN   ;   nsbc = jp_none    ; icpt = icpt + 1   ;   ENDIF       ! opa coupling via SAS module 
     242      ! 
     243      IF( icpt /= 1 )    CALL ctl_stop( 'sbc_init: choose ONE and only ONE sbc option' ) 
     244      ! 
    259245      IF(lwp) THEN 
    260246         WRITE(numout,*) 
    261          IF( nsbc == jp_esopa )   WRITE(numout,*) '              ESOPA test All surface boundary conditions' 
    262          IF( nsbc == jp_gyre  )   WRITE(numout,*) '              GYRE analytical formulation' 
    263          IF( nsbc == jp_ana   )   WRITE(numout,*) '              analytical formulation' 
    264          IF( nsbc == jp_flx   )   WRITE(numout,*) '              flux formulation' 
    265          IF( nsbc == jp_clio  )   WRITE(numout,*) '              CLIO bulk formulation' 
    266          IF( nsbc == jp_core  )   WRITE(numout,*) '              CORE bulk formulation' 
    267          IF( nsbc == jp_cpl   )   WRITE(numout,*) '              coupled formulation' 
    268          IF( nsbc == jp_mfs   )   WRITE(numout,*) '              MFS Bulk formulation' 
    269       ENDIF 
    270       ! 
     247         IF( nsbc == jp_gyre    )   WRITE(numout,*) '              GYRE analytical formulation' 
     248         IF( nsbc == jp_ana     )   WRITE(numout,*) '              analytical formulation' 
     249         IF( nsbc == jp_flx     )   WRITE(numout,*) '              flux formulation' 
     250         IF( nsbc == jp_clio    )   WRITE(numout,*) '              CLIO bulk formulation' 
     251         IF( nsbc == jp_core    )   WRITE(numout,*) '              CORE bulk formulation' 
     252         IF( nsbc == jp_purecpl )   WRITE(numout,*) '              pure coupled formulation' 
     253         IF( nsbc == jp_mfs     )   WRITE(numout,*) '              MFS Bulk formulation' 
     254         IF( nsbc == jp_none    )   WRITE(numout,*) '              OPA coupled to SAS via oasis' 
     255         IF( ln_mixcpl          )   WRITE(numout,*) '              + forced-coupled mixed formulation' 
     256         IF( nn_components/= jp_iam_nemo )  & 
     257            &                       WRITE(numout,*) '              + OASIS coupled SAS' 
     258      ENDIF 
     259      ! 
     260      IF( lk_oasis )   CALL sbc_cpl_init (nn_ice)   ! OASIS initialisation. must be done before: (1) first time step 
     261      !                                             !                                            (2) the use of nn_fsbc 
     262 
     263!     nn_fsbc initialization if OPA-SAS coupling via OASIS 
     264!     sas model time step has to be declared in OASIS (mandatory) -> nn_fsbc has to be modified accordingly 
     265      IF ( nn_components /= jp_iam_nemo ) THEN 
     266         IF ( nn_components == jp_iam_opa ) nn_fsbc = cpl_freq('O_SFLX') / NINT(rdt) 
     267         IF ( nn_components == jp_iam_sas ) nn_fsbc = cpl_freq('I_SFLX') / NINT(rdt) 
     268         ! 
     269         IF(lwp)THEN 
     270            WRITE(numout,*) 
     271            WRITE(numout,*)"   OPA-SAS coupled via OASIS : nn_fsbc re-defined from OASIS namcouple ", nn_fsbc 
     272            WRITE(numout,*) 
     273         ENDIF 
     274      ENDIF 
     275 
     276      IF( MOD( nitend - nit000 + 1, nn_fsbc) /= 0 .OR.   & 
     277          MOD( nstock             , nn_fsbc) /= 0 ) THEN  
     278         WRITE(ctmp1,*) 'experiment length (', nitend - nit000 + 1, ') or nstock (', nstock,   & 
     279            &           ' is NOT a multiple of nn_fsbc (', nn_fsbc, ')' 
     280         CALL ctl_stop( ctmp1, 'Impossible to properly do model restart' ) 
     281      ENDIF 
     282      ! 
     283      IF( MOD( rday, REAL(nn_fsbc, wp) * rdt ) /= 0 )   & 
     284         &  CALL ctl_warn( 'nn_fsbc is NOT a multiple of the number of time steps in a day' ) 
     285      ! 
     286      IF( ln_dm2dc .AND. ( ( NINT(rday) / ( nn_fsbc * NINT(rdt) ) )  < 8 ) )   & 
     287         &   CALL ctl_warn( 'diurnal cycle for qsr: the sampling of the diurnal cycle is too small...' ) 
     288 
    271289                               CALL sbc_ssm_init               ! Sea-surface mean fields initialisation 
    272290      ! 
    273291      IF( ln_ssr           )   CALL sbc_ssr_init               ! Sea-Surface Restoring initialisation 
    274292      ! 
     293                               CALL sbc_rnf_init               ! Runof initialisation 
     294      ! 
    275295      IF( nn_ice == 3      )   CALL sbc_lim_init               ! LIM3 initialisation 
    276296 
    277297      IF( nn_ice == 4      )   CALL cice_sbc_init( nsbc )      ! CICE initialisation 
    278       ! 
    279       IF( nsbc   == jp_cpl )   CALL sbc_cpl_init (nn_ice)      ! OASIS initialisation. must be done before first time step 
    280  
     298       
    281299   END SUBROUTINE sbc_init 
    282300 
     
    318336      !                                            ! ---------------------------------------- ! 
    319337      ! 
    320       IF( ln_apr_dyn ) CALL sbc_apr( kt )                ! atmospheric pressure provided at kt+0.5*nn_fsbc 
    321                                                          ! (caution called before sbc_ssm) 
    322       ! 
    323       CALL sbc_ssm( kt )                                 ! ocean sea surface variables (sst_m, sss_m, ssu_m, ssv_m) 
    324       !                                                  ! averaged over nf_sbc time-step 
     338      IF( nn_components /= jp_iam_sas )   CALL sbc_ssm( kt )   ! ocean sea surface variables (sst_m, sss_m, ssu_m, ssv_m) 
     339      !                                                        ! averaged over nf_sbc time-step 
    325340 
    326341      IF (ln_wave) CALL sbc_wave( kt ) 
     
    333348      CASE( jp_flx   )   ;   CALL sbc_flx     ( kt )                    ! flux formulation 
    334349      CASE( jp_clio  )   ;   CALL sbc_blk_clio( kt )                    ! bulk formulation : CLIO for the ocean 
    335       CASE( jp_core  )   ;   CALL sbc_blk_core( kt )                    ! bulk formulation : CORE for the ocean 
    336       CASE( jp_cpl   )   ;   CALL sbc_cpl_rcv ( kt, nn_fsbc, nn_ice )   ! coupled formulation 
     350      CASE( jp_core  )    
     351         IF( nn_components == jp_iam_sas ) & 
     352            &                CALL sbc_cpl_rcv ( kt, nn_fsbc, nn_ice )   ! OPA-SAS coupling: SAS receiving fields from OPA  
     353                             CALL sbc_blk_core( kt )                    ! bulk formulation : CORE for the ocean 
     354                                                                        ! from oce: sea surface variables (sst_m, sss_m,  ssu_m,  ssv_m) 
     355      CASE( jp_purecpl )  ;  CALL sbc_cpl_rcv ( kt, nn_fsbc, nn_ice )   ! pure coupled formulation 
     356                                                                        ! 
    337357      CASE( jp_mfs   )   ;   CALL sbc_blk_mfs ( kt )                    ! bulk formulation : MFS for the ocean 
    338       CASE( jp_esopa )                                 
    339                              CALL sbc_ana     ( kt )                    ! ESOPA, test ALL the formulations 
    340                              CALL sbc_gyre    ( kt )                    ! 
    341                              CALL sbc_flx     ( kt )                    ! 
    342                              CALL sbc_blk_clio( kt )                    ! 
    343                              CALL sbc_blk_core( kt )                    ! 
    344                              CALL sbc_cpl_rcv ( kt, nn_fsbc, nn_ice )   ! 
     358      CASE( jp_none  )  
     359         IF( nn_components == jp_iam_opa ) & 
     360                             CALL sbc_cpl_rcv ( kt, nn_fsbc, nn_ice )   ! OPA-SAS coupling: OPA receiving fields from SAS 
    345361      END SELECT 
     362 
     363      IF( ln_mixcpl )        CALL sbc_cpl_rcv ( kt, nn_fsbc, nn_ice )   ! forced-coupled mixed formulation after forcing 
     364 
    346365 
    347366      !                                            !==  Misc. Options  ==! 
     
    367386      !                                                           ! (update freshwater fluxes) 
    368387!RBbug do not understand why see ticket 667 
    369       !clem-bugsal CALL lbc_lnk( emp, 'T', 1. ) 
     388!clem: it looks like it is necessary for the north fold (in certain circumstances). Don't know why. 
     389      CALL lbc_lnk( emp, 'T', 1. ) 
    370390      ! 
    371391      IF( kt == nit000 ) THEN                          !   set the forcing field at nit000 - 1    ! 
     
    408428         ! CALL iom_rstput( kt, nitrst, numrow, 'qsr_b'  , qsr  ) 
    409429         CALL iom_rstput( kt, nitrst, numrow, 'emp_b'  , emp  ) 
    410          CALL iom_rstput( kt, nitrst, numrow, 'sfx_b' , sfx ) 
     430         CALL iom_rstput( kt, nitrst, numrow, 'sfx_b'  , sfx ) 
    411431      ENDIF 
    412432 
     
    423443         CALL iom_put( "qns"   , qns        )                   ! solar heat flux 
    424444         CALL iom_put( "qsr"   ,       qsr  )                   ! solar heat flux 
    425          IF( nn_ice > 0 )   CALL iom_put( "ice_cover", fr_i )   ! ice fraction  
     445         IF( nn_ice > 0 .OR. nn_components == jp_iam_opa )   CALL iom_put( "ice_cover", fr_i )   ! ice fraction  
    426446         CALL iom_put( "taum"  , taum       )                   ! wind stress module  
    427447         CALL iom_put( "wspd"  , wndm       )                   ! wind speed  module over free ocean or leads in presence of sea-ice 
Note: See TracChangeset for help on using the changeset viewer.