Changeset 3607


Ignore:
Timestamp:
2012-11-19T16:24:13+01:00 (8 years ago)
Author:
acc
Message:

Branch dev_NOC_2012_rev3555. #1006. Step 2: Add changes from the 2012/dev_r3322_NOCS09_SAS (Stand Alone Surface module) branch

Location:
branches/2012/dev_NOC_2012_rev3555
Files:
4 edited
2 copied

Legend:

Unmodified
Added
Removed
  • branches/2012/dev_NOC_2012_rev3555/DOC/TexFiles/Chapters/Chap_SBC.tex

    r3294 r3607  
    431431(see the directory NEMOGCM/TOOLS/WEIGHTS). 
    432432 
     433% ------------------------------------------------------------------------------------------------------------- 
     434% Standalone Surface Boundary Condition Scheme 
     435% ------------------------------------------------------------------------------------------------------------- 
     436\subsection [Standalone Surface Boundary Condition Scheme] {Standalone Surface Boundary Condition Scheme} 
     437\label{SAS_iof} 
     438 
     439In some circumstances it may be useful to avoid calculating the 3D temperature, salinity and velocity fields and 
     440simply read them in from  a previous run.  For example: 
     441 
     442\begin{enumerate} 
     443\item  Multiple runs of the model are required in code development to see the affect of different algorithms in 
     444       the bulk formulae. 
     445\item  The effect of different parameter sets in the ice model is to be examined. 
     446\end{enumerate} 
     447 
     448The StandAlone Surface scheme provides this utility. 
     449A new copy of the model has to be compiled with a configuration based on ORCA2_SAS_LIM. 
     450However no namelist parameters need be changed from the settings of the previous run (except perhaps nn{\_}date0) 
     451In this configuration, a few routines in the standard model are overriden by new versions. 
     452Routines replaced are: 
     453 
     454\begin{enumerate} 
     455\item  nemogcm.F90 
     456 
     457       This routine initialises the rest of the model and repeatedly calls the stp time stepping routine (step.F90) 
     458       Since the ocean state is not calculated all associated initialisations have been removed. 
     459\item  step.F90 
     460 
     461       The main time stepping routine now only needs to call the sbc routine (and a few utility functions). 
     462\item  sbcmod.F90 
     463 
     464       This has been cut down and now only calculates surface forcing and the ice model required.  New surface modules 
     465       that can function when only the surface level of the ocean state is defined can also be added (e.g. icebergs). 
     466\item  daymod.F90 
     467 
     468       No ocean restarts are read or written (though the ice model restarts are retained), so calls to restart functions 
     469       have been removed.  This also means that the calendar cannot be controlled by time in a restart file, so the user 
     470       must make sure that nn{\_}date0 in the model namelist is correct for his or her purposes. 
     471\item  stpctl.F90 
     472 
     473       Since there is no free surface solver, references to it have been removed from stp_ctl. 
     474\item  diawri.F90 
     475 
     476       All 3D data have been removed from the output.  The surface temperature, salinity and velocity components (which 
     477       have been read in) are written along with relevant forcing and ice data. 
     478\end{enumerate} 
     479 
     480One new routine has been added: 
     481 
     482\begin{enumerate} 
     483\item  sbcsas.F90 
     484       This routine initialises the input files needed for reading temperature, salinity and velocity arrays at the surface. 
     485       These filenames are supplied in namelist namsbc{\_}sas.  Unfortunately because of limitations with the \mdl{iom} module, 
     486       the full 3D fields from the mean files have to be read in and interpolated in time, before using just the top level. 
     487       Since fldread is used to read in the data, Interpolation on the Fly may be used to change input data resolution. 
     488\end{enumerate} 
    433489 
    434490% ================================================================ 
  • branches/2012/dev_NOC_2012_rev3555/NEMOGCM/CONFIG/cfg.txt

    r3295 r3607  
    77ORCA2_LIM OPA_SRC LIM_SRC_2 NST_SRC 
    88ORCA2_OFF_PISCES OPA_SRC OFF_SRC TOP_SRC 
     9ORCA2_SAS_LIM OPA_SRC SAS_SRC LIM_SRC_2 NST_SRC 
     10ORCA2_SAS_LIM3 OPA_SRC SAS_SRC LIM_SRC_3 NST_SRC 
  • branches/2012/dev_NOC_2012_rev3555/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90

    r3294 r3607  
    7676      !! 
    7777      !! ** Method  :   Read the namsbc namelist and set derived parameters 
     78      !!                Call init routines for all other SBC modules that have one 
    7879      !! 
    7980      !! ** Action  : - read namsbc parameters 
     
    200201      ENDIF 
    201202 
     203      !!---------------------------------------------------------------------- 
     204      !!   Other SBC modules to initialise come here 
     205      !!---------------------------------------------------------------------- 
     206 
     207      CALL sbc_ssm_init 
     208 
    202209      IF( nn_ice == 4 )   CALL cice_sbc_init (nsbc) 
    203210      ! 
     211      !!---------------------------------------------------------------------- 
    204212   END SUBROUTINE sbc_init 
    205213 
  • branches/2012/dev_NOC_2012_rev3555/NEMOGCM/NEMO/OPA_SRC/SBC/sbcssm.F90

    r3294 r3607  
    2727   PUBLIC   sbc_ssm    ! routine called by step.F90 
    2828    
     29   LOGICAL, SAVE  ::   l_ssm_mean = .FALSE.       ! keep track of whether means have been read 
     30                                                  ! from restart file 
     31 
    2932   !! * Substitutions 
    3033#  include "domzgr_substitute.h90" 
     
    5457      !!--------------------------------------------------------------------- 
    5558      !                                                   ! ---------------------------------------- ! 
    56       IF( nn_fsbc == 1 ) THEN                             !      Instantaneous surface fields        ! 
     59      IF( nn_fsbc == 1 ) THEN                             !   Instantaneous surface fields        ! 
    5760         !                                                ! ---------------------------------------- ! 
    58          IF( kt == nit000 ) THEN 
    59             IF(lwp) WRITE(numout,*) 
    60             IF(lwp) WRITE(numout,*) 'sbc_ssm : sea surface mean fields, nn_fsbc=1 : instantaneous values' 
    61             IF(lwp) WRITE(numout,*) '~~~~~~~ ' 
    62          ENDIF 
    63          ! 
    6461         ssu_m(:,:) = ub(:,:,1) 
    6562         ssv_m(:,:) = vb(:,:,1) 
     
    7370         ! 
    7471      ELSE 
    75          !                                                ! ---------------------------------------- ! 
    76          IF( kt == nit000) THEN                           !       Initialisation: 1st time-step      ! 
    77             !                                             ! ---------------------------------------- ! 
     72         !                                                ! ----------------------------------------------- ! 
     73         IF( kt == nit000 && .NOT. l_ssm_mean ) THEN      !   Initialisation: 1st time-step, no input means ! 
     74            !                                             ! ----------------------------------------------- ! 
    7875            IF(lwp) WRITE(numout,*) 
    79             IF(lwp) WRITE(numout,*) 'sbc_ssm : sea surface mean fields' 
    80             ! 
    81             IF( ln_rstart .AND. iom_varid( numror, 'nn_fsbc', ldstop = .FALSE. ) > 0 ) THEN  
    82                CALL iom_get( numror               , 'nn_fsbc', zf_sbc )   ! sbc frequency of previous run 
    83                CALL iom_get( numror, jpdom_autoglo, 'ssu_m'  , ssu_m  )   ! sea surface mean velocity    (T-point) 
    84                CALL iom_get( numror, jpdom_autoglo, 'ssv_m'  , ssv_m  )   !   "         "    velocity    (V-point) 
    85                CALL iom_get( numror, jpdom_autoglo, 'sst_m'  , sst_m  )   !   "         "    temperature (T-point) 
    86                CALL iom_get( numror, jpdom_autoglo, 'sss_m'  , sss_m  )   !   "         "    salinity    (T-point) 
    87                CALL iom_get( numror, jpdom_autoglo, 'ssh_m'  , ssh_m  )   !   "         "    height      (T-point) 
    88                ! 
    89                IF( zf_sbc /= REAL( nn_fsbc, wp ) ) THEN      ! nn_fsbc has changed between 2 runs 
    90                   IF(lwp) WRITE(numout,*) '~~~~~~~   restart with a change in the frequency of mean ',   & 
    91                      &                    'from ', zf_sbc, ' to ', nn_fsbc 
    92                   zcoef = REAL( nn_fsbc - 1, wp ) / zf_sbc 
    93                   ssu_m(:,:) = zcoef * ssu_m(:,:) 
    94                   ssv_m(:,:) = zcoef * ssv_m(:,:) 
    95                   sst_m(:,:) = zcoef * sst_m(:,:) 
    96                   sss_m(:,:) = zcoef * sss_m(:,:) 
    97                   ssh_m(:,:) = zcoef * ssh_m(:,:) 
    98                ELSE 
    99                   IF(lwp) WRITE(numout,*) '~~~~~~~   mean fields read in the ocean restart file' 
    100                ENDIF 
    101             ELSE 
    102                IF(lwp) WRITE(numout,*) '~~~~~~~   mean fields initialised to instantaneous values' 
    103                zcoef = REAL( nn_fsbc - 1, wp ) 
    104                ssu_m(:,:) = zcoef * ub(:,:,1) 
    105                ssv_m(:,:) = zcoef * vb(:,:,1) 
    106                sst_m(:,:) = zcoef * tsn(:,:,1,jp_tem) 
    107                sss_m(:,:) = zcoef * tsn(:,:,1,jp_sal) 
    108                !                          ! removed inverse barometer ssh when Patm forcing is used  
    109                IF( ln_apr_dyn ) THEN   ;   ssh_m(:,:) = zcoef * ( sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) ) 
    110                ELSE                    ;   ssh_m(:,:) = zcoef *   sshn(:,:) 
    111                ENDIF 
    112  
     76            IF(lwp) WRITE(numout,*) '~~~~~~~   mean fields initialised to instantaneous values' 
     77            zcoef = REAL( nn_fsbc - 1, wp ) 
     78            ssu_m(:,:) = zcoef * ub(:,:,1) 
     79            ssv_m(:,:) = zcoef * vb(:,:,1) 
     80            sst_m(:,:) = zcoef * tsn(:,:,1,jp_tem) 
     81            sss_m(:,:) = zcoef * tsn(:,:,1,jp_sal) 
     82            !                          ! removed inverse barometer ssh when Patm forcing is used  
     83            IF( ln_apr_dyn ) THEN   ;   ssh_m(:,:) = zcoef * ( sshn(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) ) 
     84            ELSE                    ;   ssh_m(:,:) = zcoef *   sshn(:,:) 
    11385            ENDIF 
    11486            !                                             ! ---------------------------------------- ! 
     
    165137   END SUBROUTINE sbc_ssm 
    166138 
     139   SUBROUTINE sbc_ssm_init 
     140      !!---------------------------------------------------------------------- 
     141      !!                  ***  ROUTINE sbc_ssm_init  *** 
     142      !! 
     143      !! ** Purpose :   Initialisation of the sbc data 
     144      !! 
     145      !! ** Action  : - read parameters 
     146      !!---------------------------------------------------------------------- 
     147      REAL(wp) ::   zcoef               ! local scalar 
     148      !!---------------------------------------------------------------------- 
     149 
     150      IF( nn_fsbc == 1 ) THEN 
     151         ! 
     152         IF(lwp) WRITE(numout,*) 
     153         IF(lwp) WRITE(numout,*) 'sbc_ssm : sea surface mean fields, nn_fsbc=1 : instantaneous values' 
     154         IF(lwp) WRITE(numout,*) '~~~~~~~ ' 
     155         ! 
     156      ELSE 
     157         !                
     158         IF(lwp) WRITE(numout,*) 
     159         IF(lwp) WRITE(numout,*) 'sbc_ssm : sea surface mean fields' 
     160         IF(lwp) WRITE(numout,*) '~~~~~~~ ' 
     161         ! 
     162         IF( ln_rstart .AND. iom_varid( numror, 'nn_fsbc', ldstop = .FALSE. ) > 0 ) THEN 
     163            l_ssm_mean = .TRUE. 
     164            CALL iom_get( numror               , 'nn_fsbc', zf_sbc )   ! sbc frequency of previous run 
     165            CALL iom_get( numror, jpdom_autoglo, 'ssu_m'  , ssu_m  )   ! sea surface mean velocity    (T-point) 
     166            CALL iom_get( numror, jpdom_autoglo, 'ssv_m'  , ssv_m  )   !   "         "    velocity    (V-point) 
     167            CALL iom_get( numror, jpdom_autoglo, 'sst_m'  , sst_m  )   !   "         "    temperature (T-point) 
     168            CALL iom_get( numror, jpdom_autoglo, 'sss_m'  , sss_m  )   !   "         "    salinity    (T-point) 
     169            CALL iom_get( numror, jpdom_autoglo, 'ssh_m'  , ssh_m  )   !   "         "    height      (T-point) 
     170            ! 
     171            IF( zf_sbc /= REAL( nn_fsbc, wp ) ) THEN      ! nn_fsbc has changed between 2 runs 
     172               IF(lwp) WRITE(numout,*) '~~~~~~~   restart with a change in the frequency of mean ',   & 
     173                  &                    'from ', zf_sbc, ' to ', nn_fsbc  
     174               zcoef = REAL( nn_fsbc - 1, wp ) / zf_sbc  
     175               ssu_m(:,:) = zcoef * ssu_m(:,:)  
     176               ssv_m(:,:) = zcoef * ssv_m(:,:) 
     177               sst_m(:,:) = zcoef * sst_m(:,:) 
     178               sss_m(:,:) = zcoef * sss_m(:,:) 
     179               ssh_m(:,:) = zcoef * ssh_m(:,:) 
     180            ELSE 
     181               IF(lwp) WRITE(numout,*) '~~~~~~~   mean fields read in the ocean restart file' 
     182            ENDIF 
     183         ENDIF 
     184      ENDIF 
     185      ! 
     186   END SUBROUTINE sbc_ssm_init 
     187 
    167188   !!====================================================================== 
    168189END MODULE sbcssm 
Note: See TracChangeset for help on using the changeset viewer.