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 4064 for branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/NEMO/TOP_SRC/trcnam.F90 – NEMO

Ignore:
Timestamp:
2013-10-15T19:54:10+02:00 (11 years ago)
Author:
cetlod
Message:

branch dev_r3940_CNRS4_IOCRS: some improvments+ minor bug corrections

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/NEMO/TOP_SRC/trcnam.F90

    r3882 r4064  
    3232   PRIVATE  
    3333 
     34   PUBLIC trc_nam_run  ! called in trcini 
    3435   PUBLIC trc_nam      ! called in trcini 
    3536 
     
    4445CONTAINS 
    4546 
     47 
    4648   SUBROUTINE trc_nam 
    4749      !!--------------------------------------------------------------------- 
     
    5456      !!                ( (PISCES, CFC, MY_TRC ) 
    5557      !!--------------------------------------------------------------------- 
    56       INTEGER ::  jn, ierr 
    57       ! Definition of a tracer as a structure 
    58       TYPE(PTRACER), DIMENSION(jptra) :: sn_tracer  ! type of tracer for saving if not key_iomput 
    59       !! 
    60       NAMELIST/namtrc/ nn_dttrc, nn_writetrc, ln_rsttr, nn_rsttr, & 
    61          &             cn_trcrst_in, cn_trcrst_out, sn_tracer, ln_trcdta, & 
    62          &             ln_trcdmp, ln_trcdmp_clo, ln_top_euler 
    63 #if defined key_trdmld_trc  || defined key_trdtrc 
    64       NAMELIST/namtrc_trd/ nn_trd_trc, nn_ctls_trc, rn_ucf_trc, & 
    65          &                ln_trdmld_trc_restart, ln_trdmld_trc_instant, & 
    66          &                cn_trdrst_trc_in, cn_trdrst_trc_out, ln_trdtrc 
    67 #endif 
    68       NAMELIST/namtrc_dia/ ln_diatrc, ln_diabio, nn_writedia, nn_writebio 
    69  
    70       !!--------------------------------------------------------------------- 
    71  
    72       IF(lwp) WRITE(numout,*) 'trc_nam : read the passive tracer namelists' 
    73       IF(lwp) WRITE(numout,*) '~~~~~~~' 
    74  
    75       CALL ctl_opn( numnat, 'namelist_top', 'OLD', 'FORMATTED', 'SEQUENTIAL', 1, numout, .FALSE. ) 
    76  
    77       ! Namelist nattrc (files) 
    78       ! ---------------------------------------------- 
    79       nn_dttrc      = 1                 ! default values 
    80       nn_writetrc   = 10  
    81       ln_top_euler  = .FALSE. 
    82       ln_rsttr      = .FALSE. 
    83       nn_rsttr      =  0 
    84       cn_trcrst_in  = 'restart_trc' 
    85       cn_trcrst_out = 'restart_trc' 
    86       ! 
    87       DO jn = 1, jptra 
    88          WRITE( sn_tracer(jn)%clsname,'("TR_",I1)'           ) jn 
    89          WRITE( sn_tracer(jn)%cllname,'("TRACER NUMBER ",I1)') jn 
    90          sn_tracer(jn)%clunit  = 'mmole/m3' 
    91          sn_tracer(jn)%llinit  = .FALSE. 
    92          sn_tracer(jn)%llsave  = .TRUE. 
    93       END DO 
    94       ln_trcdta     = .FALSE. 
    95       ln_trcdmp     = .FALSE. 
    96       ln_trcdmp_clo = .FALSE. 
    97  
    98  
    99       REWIND( numnat )               ! read nattrc 
    100       READ  ( numnat, namtrc ) 
    101  
    102       DO jn = 1, jptra 
    103          ctrcnm    (jn) = TRIM( sn_tracer(jn)%clsname ) 
    104          ctrcln    (jn) = TRIM( sn_tracer(jn)%cllname ) 
    105          ctrcun    (jn) = TRIM( sn_tracer(jn)%clunit  ) 
    106          ln_trc_ini(jn) =       sn_tracer(jn)%llinit 
    107          ln_trc_wri(jn) =       sn_tracer(jn)%llsave 
    108       END DO 
    109  
    110       !!KPE  computes the first time step of tracer model 
    111       nittrc000 = nit000 + nn_dttrc - 1 
    112   
     58      INTEGER ::  jn 
     59 
     60      !                                        !   Parameters of the run  
     61      IF( .NOT. lk_offline ) CALL trc_nam_run 
     62       
     63      !                                        !  passive tracer informations 
     64      CALL trc_nam_trc 
     65       
     66      !                                        !   Parameters of additional diagnostics 
     67      CALL trc_nam_dia 
     68 
     69      !                                        !   namelist of transport 
     70      CALL trc_nam_trp 
     71 
     72 
     73      IF( ln_rsttr )                      ln_trcdta = .FALSE.   ! restart : no need of clim data 
     74      ! 
     75      IF( ln_trcdmp .OR. ln_trcdmp_clo )  ln_trcdta = .TRUE.   ! damping : need to have clim data 
     76      ! 
     77      IF( .NOT.ln_trcdta ) THEN 
     78         ln_trc_ini(:) = .FALSE. 
     79      ENDIF 
     80 
    11381 
    11482      IF(lwp) THEN                   ! control print 
    11583         WRITE(numout,*) 
    11684         WRITE(numout,*) ' Namelist : namtrc' 
    117          WRITE(numout,*) '   time step freq. for passive tracer           nn_dttrc      = ', nn_dttrc 
    118          WRITE(numout,*) '   restart  for passive tracer                  ln_rsttr      = ', ln_rsttr 
    119          WRITE(numout,*) '   control of time step for passive tracer      nn_rsttr      = ', nn_rsttr 
    120          WRITE(numout,*) '   first time step for pass. trac.              nittrc000     = ', nittrc000 
    121          WRITE(numout,*) '   frequency of outputs for passive tracers     nn_writetrc   = ', nn_writetrc   
    12285         WRITE(numout,*) '   Read inputs data from file (y/n)             ln_trcdta     = ', ln_trcdta 
    12386         WRITE(numout,*) '   Damping of passive tracer (y/n)              ln_trcdmp     = ', ln_trcdmp 
    12487         WRITE(numout,*) '   Restoring of tracer on closed seas           ln_trcdmp_clo = ', ln_trcdmp_clo 
    125          WRITE(numout,*) '   Use euler integration for TRC (y/n)          ln_top_euler  = ', ln_top_euler 
    12688         WRITE(numout,*) ' ' 
    12789         DO jn = 1, jptra 
     
    13193      ENDIF 
    13294 
     95      IF(lwp) THEN                   ! control print 
     96         IF( ln_rsttr ) THEN 
     97            WRITE(numout,*) 
     98            WRITE(numout,*) '  Read a restart file for passive tracer : ', TRIM( cn_trcrst_in ) 
     99            WRITE(numout,*) 
     100         ENDIF 
     101         IF( ln_trcdta .AND. .NOT.ln_rsttr ) THEN 
     102            WRITE(numout,*) 
     103            WRITE(numout,*) '  Some of the passive tracers are initialised from climatologies ' 
     104            WRITE(numout,*) 
     105         ENDIF 
     106         IF( .NOT.ln_trcdta ) THEN 
     107            WRITE(numout,*) 
     108            WRITE(numout,*) '  All the passive tracers are initialised with constant values ' 
     109            WRITE(numout,*) 
     110         ENDIF 
     111      ENDIF 
     112 
     113       
    133114      rdttrc(:) = rdttra(:) * FLOAT( nn_dttrc )   ! vertical profile of passive tracer time-step 
    134115   
     
    137118        WRITE(numout,*) '    Passive Tracer  time step    rdttrc  = ', rdttrc(1) 
    138119        WRITE(numout,*)  
    139       ENDIF 
    140  
    141       ln_diatrc = .FALSE. 
    142       ln_diabio = .FALSE. 
    143       nn_writedia = 10 
    144       nn_writebio = 10 
    145  
    146       REWIND( numnat )               !  namelist namtoptrd : passive tracer trends diagnostic 
    147       READ  ( numnat, namtrc_dia ) 
    148  
    149       IF(lwp) THEN 
    150          WRITE(numout,*) 
    151          WRITE(numout,*) 
    152          WRITE(numout,*) ' Namelist : namtrc_dia' 
    153          WRITE(numout,*) '    save additionnal diagnostics arrays         ln_diatrc   = ', ln_diatrc 
    154          WRITE(numout,*) '    save additionnal biology diagnostics arrays ln_diabio   = ', ln_diabio 
    155          WRITE(numout,*) '    frequency of outputs for additional arrays  nn_writedia = ', nn_writedia 
    156          WRITE(numout,*) '    frequency of outputs for biological trends  nn_writebio = ', nn_writebio 
    157          WRITE(numout,*) ' ' 
    158       ENDIF 
    159  
    160       IF( ln_diatrc .AND. .NOT. lk_iomput ) THEN  
    161          ALLOCATE( trc2d(jpi,jpj,jpdia2d), trc3d(jpi,jpj,jpk,jpdia3d),  & 
    162            &       ctrc2d(jpdia2d), ctrc2l(jpdia2d), ctrc2u(jpdia2d) ,  &  
    163            &       ctrc3d(jpdia3d), ctrc3l(jpdia3d), ctrc3u(jpdia3d) ,  STAT = ierr )  
    164          IF( ierr > 0 )   CALL ctl_stop( 'STOP', 'trcnam: unable to allocate add. diag. array' ) 
    165          ! 
    166          trc2d(:,:,:  ) = 0._wp  ;   ctrc2d(:) = ' '   ;   ctrc2l(:) = ' '    ;    ctrc2u(:) = ' '  
    167          trc3d(:,:,:,:) = 0._wp  ;   ctrc3d(:) = ' '   ;   ctrc3l(:) = ' '    ;    ctrc3u(:) = ' '  
    168          ! 
    169       ENDIF 
    170  
    171       IF( ( ln_diabio .AND. .NOT. lk_iomput ) .OR. l_trdtrc ) THEN 
    172          ALLOCATE( trbio (jpi,jpj,jpk,jpdiabio) , & 
    173            &       ctrbio(jpdiabio), ctrbil(jpdiabio), ctrbiu(jpdiabio), STAT = ierr )  
    174          IF( ierr > 0 )   CALL ctl_stop( 'STOP', 'trcnam: unable to allocate bio. diag. array' ) 
    175          ! 
    176          trbio(:,:,:,:) = 0._wp  ;   ctrbio(:) = ' '   ;   ctrbil(:) = ' '    ;    ctrbiu(:) = ' '  
    177          ! 
    178       ENDIF 
    179  
    180       ! namelist of transport 
    181       ! --------------------- 
    182       CALL trc_nam_trp 
    183  
    184  
    185       IF( ln_rsttr )                      ln_trcdta = .FALSE.   ! restart : no need of clim data 
    186       ! 
    187       IF( ln_trcdmp .OR. ln_trcdmp_clo )  ln_trcdta = .TRUE.   ! damping : need to have clim data 
    188       ! 
    189       IF( .NOT.ln_trcdta ) THEN 
    190          ln_trc_ini(:) = .FALSE. 
    191       ENDIF 
    192  
    193       IF(lwp) THEN                   ! control print 
    194          IF( ln_rsttr ) THEN 
    195             WRITE(numout,*) 
    196             WRITE(numout,*) '  Read a restart file for passive tracer : ', TRIM( cn_trcrst_in ) 
    197             WRITE(numout,*) 
    198          ENDIF 
    199          IF( ln_trcdta .AND. .NOT.ln_rsttr ) THEN 
    200             WRITE(numout,*) 
    201             WRITE(numout,*) '  Some of the passive tracers are initialised from climatologies ' 
    202             WRITE(numout,*) 
    203          ENDIF 
    204          IF( .NOT.ln_trcdta ) THEN 
    205             WRITE(numout,*) 
    206             WRITE(numout,*) '  All the passive tracers are initialised with constant values ' 
    207             WRITE(numout,*) 
    208          ENDIF 
    209120      ENDIF 
    210121 
     
    260171   END SUBROUTINE trc_nam 
    261172 
     173   SUBROUTINE trc_nam_run 
     174      !!--------------------------------------------------------------------- 
     175      !!                     ***  ROUTINE trc_nam  *** 
     176      !! 
     177      !! ** Purpose :   read options for the passive tracer run (namelist)  
     178      !! 
     179      !!--------------------------------------------------------------------- 
     180      NAMELIST/namtrc_run/ nn_dttrc, nn_writetrc, ln_rsttr, nn_rsttr, ln_top_euler, & 
     181        &                  cn_trcrst_in, cn_trcrst_out 
     182 
     183      !!--------------------------------------------------------------------- 
     184 
     185      IF(lwp) WRITE(numout,*)  
     186      IF(lwp) WRITE(numout,*) 'trc_nam_run : read the passive tracer namelists' 
     187      IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 
     188 
     189      CALL ctl_opn( numnat, 'namelist_top', 'OLD', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE. ) 
     190 
     191      ! Namelist nattrc (files) 
     192      ! ---------------------------------------------- 
     193      nn_dttrc      = 1                 ! default values 
     194      nn_writetrc   = 10  
     195      ln_top_euler  = .FALSE. 
     196      ln_rsttr      = .FALSE. 
     197      nn_rsttr      =  0 
     198      cn_trcrst_in  = 'restart_trc' 
     199      cn_trcrst_out = 'restart_trc' 
     200      ! 
     201      REWIND( numnat )               ! read nattrc 
     202      READ  ( numnat, namtrc_run ) 
     203 
     204      !  computes the first time step of tracer model 
     205      nittrc000 = nit000 + nn_dttrc - 1 
     206 
     207      IF(lwp) THEN                   ! control print 
     208         WRITE(numout,*) 
     209         WRITE(numout,*) ' Namelist : namtrc' 
     210         WRITE(numout,*) '   time step freq. for passive tracer           nn_dttrc      = ', nn_dttrc 
     211         WRITE(numout,*) '   restart  for passive tracer                  ln_rsttr      = ', ln_rsttr 
     212         WRITE(numout,*) '   control of time step for passive tracer      nn_rsttr      = ', nn_rsttr 
     213         WRITE(numout,*) '   first time step for pass. trac.              nittrc000     = ', nittrc000 
     214         WRITE(numout,*) '   frequency of outputs for passive tracers     nn_writetrc   = ', nn_writetrc   
     215         WRITE(numout,*) ' ' 
     216      ENDIF 
     217      ! 
     218    END SUBROUTINE trc_nam_run 
     219 
     220 
     221   SUBROUTINE trc_nam_trc 
     222      !!--------------------------------------------------------------------- 
     223      !!                     ***  ROUTINE trc_nam  *** 
     224      !! 
     225      !! ** Purpose :   read options for the passive tracer run (namelist)  
     226      !! 
     227      !!--------------------------------------------------------------------- 
     228      INTEGER ::  jn 
     229      ! Definition of a tracer as a structure 
     230      TYPE(PTRACER), DIMENSION(jptra) :: sn_tracer  ! type of tracer for saving if not key_iomput 
     231      !! 
     232      NAMELIST/namtrc/ sn_tracer, ln_trcdta,ln_trcdmp, ln_trcdmp_clo 
     233 
     234      !!--------------------------------------------------------------------- 
     235 
     236      IF(lwp) WRITE(numout,*)  
     237      IF(lwp) WRITE(numout,*) 'trc_nam : read the passive tracer namelists' 
     238      IF(lwp) WRITE(numout,*) '~~~~~~~' 
     239 
     240      ! 
     241      DO jn = 1, jptra 
     242         WRITE( sn_tracer(jn)%clsname,'("TR_",I1)'           ) jn 
     243         WRITE( sn_tracer(jn)%cllname,'("TRACER NUMBER ",I1)') jn 
     244         sn_tracer(jn)%clunit  = 'mmole/m3' 
     245         sn_tracer(jn)%llinit  = .FALSE. 
     246         sn_tracer(jn)%llsave  = .TRUE. 
     247      END DO 
     248      ln_trcdta     = .FALSE. 
     249      ln_trcdmp     = .FALSE. 
     250      ln_trcdmp_clo = .FALSE. 
     251 
     252      REWIND( numnat )               ! read nattrc 
     253      READ  ( numnat, namtrc ) 
     254 
     255      DO jn = 1, jptra 
     256         ctrcnm    (jn) = TRIM( sn_tracer(jn)%clsname ) 
     257         ctrcln    (jn) = TRIM( sn_tracer(jn)%cllname ) 
     258         ctrcun    (jn) = TRIM( sn_tracer(jn)%clunit  ) 
     259         ln_trc_ini(jn) =       sn_tracer(jn)%llinit 
     260         ln_trc_wri(jn) =       sn_tracer(jn)%llsave 
     261      END DO 
     262       
     263    END SUBROUTINE trc_nam_trc 
     264 
     265 
     266   SUBROUTINE trc_nam_dia 
     267      !!--------------------------------------------------------------------- 
     268      !!                     ***  ROUTINE trc_nam_dia  *** 
     269      !! 
     270      !! ** Purpose :   read options for the passive tracer diagnostics 
     271      !! 
     272      !! ** Method  : - read passive tracer namelist  
     273      !!              - read namelist of each defined SMS model 
     274      !!                ( (PISCES, CFC, MY_TRC ) 
     275      !!--------------------------------------------------------------------- 
     276      INTEGER ::  ierr 
     277#if defined key_trdmld_trc  || defined key_trdtrc 
     278      NAMELIST/namtrc_trd/ nn_trd_trc, nn_ctls_trc, rn_ucf_trc, & 
     279         &                ln_trdmld_trc_restart, ln_trdmld_trc_instant, & 
     280         &                cn_trdrst_trc_in, cn_trdrst_trc_out, ln_trdtrc 
     281#endif 
     282      NAMELIST/namtrc_dia/ ln_diatrc, ln_diabio, nn_writedia, nn_writebio 
     283 
     284      !!--------------------------------------------------------------------- 
     285 
     286      IF(lwp) WRITE(numout,*)  
     287      IF(lwp) WRITE(numout,*) 'trc_nam_dia : read the passive tracer diagnostics options' 
     288      IF(lwp) WRITE(numout,*) '~~~~~~~' 
     289 
     290      ln_diatrc = .FALSE. 
     291      ln_diabio = .FALSE. 
     292      nn_writedia = 10 
     293      nn_writebio = 10 
     294 
     295      REWIND( numnat )               !  namelist namtoptrd : passive tracer trends diagnostic 
     296      READ  ( numnat, namtrc_dia ) 
     297 
     298      IF(lwp) THEN 
     299         WRITE(numout,*) 
     300         WRITE(numout,*) 
     301         WRITE(numout,*) ' Namelist : namtrc_dia' 
     302         WRITE(numout,*) '    save additionnal diagnostics arrays         ln_diatrc   = ', ln_diatrc 
     303         WRITE(numout,*) '    save additionnal biology diagnostics arrays ln_diabio   = ', ln_diabio 
     304         WRITE(numout,*) '    frequency of outputs for additional arrays  nn_writedia = ', nn_writedia 
     305         WRITE(numout,*) '    frequency of outputs for biological trends  nn_writebio = ', nn_writebio 
     306         WRITE(numout,*) ' ' 
     307      ENDIF 
     308 
     309      IF( ln_diatrc .AND. .NOT. lk_iomput ) THEN  
     310         ALLOCATE( trc2d(jpi,jpj,jpdia2d), trc3d(jpi,jpj,jpk,jpdia3d),  & 
     311           &       ctrc2d(jpdia2d), ctrc2l(jpdia2d), ctrc2u(jpdia2d) ,  &  
     312           &       ctrc3d(jpdia3d), ctrc3l(jpdia3d), ctrc3u(jpdia3d) ,  STAT = ierr )  
     313         IF( ierr > 0 )   CALL ctl_stop( 'STOP', 'trcnam: unable to allocate add. diag. array' ) 
     314         ! 
     315         trc2d(:,:,:  ) = 0._wp  ;   ctrc2d(:) = ' '   ;   ctrc2l(:) = ' '    ;    ctrc2u(:) = ' '  
     316         trc3d(:,:,:,:) = 0._wp  ;   ctrc3d(:) = ' '   ;   ctrc3l(:) = ' '    ;    ctrc3u(:) = ' '  
     317         ! 
     318      ENDIF 
     319 
     320      IF( ( ln_diabio .AND. .NOT. lk_iomput ) .OR. l_trdtrc ) THEN 
     321         ALLOCATE( trbio (jpi,jpj,jpk,jpdiabio) , & 
     322           &       ctrbio(jpdiabio), ctrbil(jpdiabio), ctrbiu(jpdiabio), STAT = ierr )  
     323         IF( ierr > 0 )   CALL ctl_stop( 'STOP', 'trcnam: unable to allocate bio. diag. array' ) 
     324         ! 
     325         trbio(:,:,:,:) = 0._wp  ;   ctrbio(:) = ' '   ;   ctrbil(:) = ' '    ;    ctrbiu(:) = ' '  
     326         ! 
     327      ENDIF 
     328      ! 
     329   END SUBROUTINE trc_nam_dia 
     330 
    262331#else 
    263332   !!---------------------------------------------------------------------- 
     
    267336   SUBROUTINE trc_nam                      ! Empty routine    
    268337   END SUBROUTINE trc_nam 
     338   SUBROUTINE trc_nam_run                      ! Empty routine    
     339   END SUBROUTINE trc_nam_run 
    269340#endif 
    270341 
Note: See TracChangeset for help on using the changeset viewer.