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 494 – NEMO

Changeset 494


Ignore:
Timestamp:
2006-09-01T16:03:49+02:00 (18 years ago)
Author:
opalod
Message:

nemo_v1_update_062:CE+RB: use IOM for passive tracers

Location:
trunk/NEMO/TOP_SRC
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/TOP_SRC/SMS/trcini.pisces.h90

    r341 r494  
    3737      !!---------------------------------------------------------------------- 
    3838      !!  TOP 1.0 , LOCEAN-IPSL (2005)  
    39    !! $Header$  
    40    !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt  
    41       !!---------------------------------------------------------------------- 
     39      !! $Header$  
     40      !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt  
     41      !!---------------------------------------------------------------------- 
     42      !!Module used 
     43      USE iom 
     44 
    4245      !! local declarations 
    4346      !! ================== 
    4447      INTEGER :: ji,jj,jk 
    45       INTEGER :: ichl,iband,mo 
    46       INTEGER , PARAMETER :: jpmois = 12,      & 
    47          jpan   = 1  
    48  
    49       REAL(wp) :: xtoto,expide,denitide,ztra,zmaskt 
     48      INTEGER :: ichl,iband,jm 
     49      INTEGER , PARAMETER :: jpmois = 12, jpan   = 1  
     50 
     51      REAL(wp) :: ztoto,expide,denitide,ztra,zmaskt 
    5052      REAL(wp) , DIMENSION (jpi,jpj) :: riverdoc,river,ndepo 
    51       CHARACTER (len=34) :: clname 
    52  
    53       INTEGER :: ipi,ipj,ipk,itime 
    54       INTEGER , DIMENSION (jpmois) :: istep 
    55       INTEGER , DIMENSION (jpan) :: istep0 
    56       REAL(wp) :: zsecond, zdate0 
    57       REAL(wp) , DIMENSION (jpi,jpj) :: zlon,zlat 
    58       REAL(wp), DIMENSION (jpk) :: zlev 
     53 
    5954      INTEGER :: numriv,numdust,numbath,numdep 
     55      INTEGER :: numlight = 49 
     56 
    6057 
    6158      !! 1. initialization 
     
    7269      IF(lwp) write(numout,*) ' Biology time step=',rfact2 
    7370 
     71 
    7472      !!    INITIALISE DUST INPUT FROM ATMOSPHERE 
    7573      !!    ------------------------------------- 
    7674 
    77       IF (bdustfer) THEN 
    78          clname='dust.orca.nc' 
    79          CALL flinopen(clname,mig(1),nlci,mjg(1),nlcj,.false.,ipi,ipj,0        & 
    80             &      ,zlon,zlat,zlev,itime,istep,zdate0,zsecond,numdust) 
    81          CALL flinget(numdust,'dust',jpidta,jpjdta,0,jpmois,1,                 & 
    82             &        12,mig(1),nlci,mjg(1),nlcj,dustmo(1:nlci,1:nlcj,:) ) 
    83          CALL flinclo(numdust) 
    84  
    85          ! Extra-halo initialization in MPP 
    86          IF( lk_mpp ) THEN 
    87             DO ji = nlci+1, jpi 
    88                dustmo(ji,:,:) = dustmo(1,:,:) 
    89             ENDDO 
    90             DO jj = nlcj+1, jpj 
    91                dustmo(:,jj,:)=dustmo(:,1,:) 
    92             ENDDO 
    93          ENDIF 
     75      IF ( bdustfer ) THEN 
     76         IF(lwp) WRITE(numout,*) ' Initialize dust input from atmosphere ' 
     77         CALL iom_open ( 'dust.orca.nc', numdust ) 
     78         DO jm = 1, jpmois 
     79            CALL iom_get  ( numdust, jpdom_data, 'dust', dustmo(:,:,jm), jm ) 
     80         ENDDO 
     81         CALL iom_close( numdust ) 
    9482      ELSE 
    95          dustmo(:,:,:)=0. 
     83         dustmo(:,:,:) = 0. 
    9684      ENDIF 
     85 
     86      do jm = 1, jpmois 
     87        write(numout,*) ' Mois : ',jm 
     88        write(numout,*) ( ( dustmo(ji,jj,jm), ji=1,jpi,20),jj=1,jpj,20) 
     89      enddo 
     90 
    9791 
    9892      !!    INITIALISE THE NUTRIENT INPUT BY RIVERS 
    9993      !!    --------------------------------------- 
    10094 
    101       IF (briver) THEN 
    102          clname='river.orca.nc' 
    103          CALL flinopen(clname,mig(1),nlci,mjg(1),nlcj,.false.,ipi,ipj,0        & 
    104             &      ,zlon,zlat,zlev,itime,istep0,zdate0,zsecond,numriv) 
    105          CALL flinget(numriv,'riverdic',jpidta,jpjdta,0,jpan,1,                & 
    106             &        1,mig(1),nlci,mjg(1),nlcj,river(1:nlci,1:nlcj) ) 
    107          CALL flinget(numriv,'riverdoc',jpidta,jpjdta,0,jpan,1,                & 
    108             &        1,mig(1),nlci,mjg(1),nlcj,riverdoc(1:nlci,1:nlcj) ) 
    109          CALL flinclo(numriv) 
    110  
    111          ! Extra-halo initialization in MPP 
    112          IF( lk_mpp ) THEN 
    113             DO ji = nlci+1, jpi 
    114                river(ji,:) = river(1,:) 
    115                riverdoc(ji,:) = riverdoc(1,:) 
    116             ENDDO 
    117             DO jj = nlcj+1, jpj 
    118                river(:,jj)=river(:,1) 
    119                riverdoc(:,jj) = riverdoc(:,1) 
    120             ENDDO 
    121          ENDIF 
    122  
     95      IF ( briver ) THEN 
     96         IF(lwp) WRITE(numout,*) ' Initialize the nutrient input by rivers ' 
     97         CALL iom_open ( 'river.orca.nc', numriv ) 
     98         CALL iom_get  ( numriv, jpdom_data, 'riverdic', river   (:,:), jpan ) 
     99         CALL iom_get  ( numriv, jpdom_data, 'riverdoc', riverdoc(:,:), jpan ) 
     100         CALL iom_close( numriv ) 
    123101      ELSE 
    124          river(:,:)=0. 
    125          riverdoc(:,:)=0. 
     102         river   (:,:) = 0. 
     103         riverdoc(:,:) = 0. 
    126104      endif 
    127105 
     
    129107      !!  --------------------------------------- 
    130108 
    131       IF (bndepo) THEN 
    132          clname='ndeposition.orca.nc' 
    133          CALL flinopen(clname,mig(1),nlci,mjg(1),nlcj,.false.,ipi,ipj,0        & 
    134             &      ,zlon,zlat,zlev,itime,istep0,zdate0,zsecond,numdep) 
    135          CALL flinget(numdep,'ndep',jpidta,jpjdta,0,jpan,1,                   & 
    136             &        1,mig(1),nlci,mjg(1),nlcj,ndepo(1:nlci,1:nlcj) ) 
    137          CALL flinclo(numdep) 
    138  
    139          ! Extra-halo initialization in MPP 
    140          IF( lk_mpp ) THEN 
    141             DO ji = nlci+1, jpi 
    142                ndepo(ji,:) = ndepo(1,:) 
    143             ENDDO 
    144             DO jj = nlcj+1, jpj 
    145                ndepo(:,jj)=ndepo(:,1) 
    146             ENDDO 
    147          ENDIF 
    148  
     109      IF ( bndepo ) THEN 
     110         IF(lwp) WRITE(numout,*) ' Initialize the nutrient input by dust ' 
     111         CALL iom_open ( 'ndeposition.orca.nc', numdep ) 
     112         CALL iom_get  ( numdep, jpdom_data, 'ndep', ndepo(:,:), jpan ) 
     113         CALL iom_close( numdep ) 
    149114      ELSE 
    150          ndepo(:,:)=0. 
     115         ndepo(:,:) = 0. 
    151116      ENDIF 
    152117 
    153118      !!    Computation of the coastal mask. 
    154       !!    Computation of an island mask to enhance coastal supply 
    155       !!    of iron 
    156       !!    ------------------------------------------------------- 
    157  
    158       IF (bsedinput) THEN 
    159          clname='bathy.orca.nc' 
    160          CALL flinopen(clname,mig(1),nlci,mjg(1),nlcj,.false.,ipi,ipj,ipk      & 
    161             &      ,zlon,zlat,zlev,itime,istep0,zdate0,zsecond,numbath) 
    162          CALL flinget(numbath,'bathy',jpidta,jpjdta,jpk,jpan,1,                & 
    163             &        1,mig(1),nlci,mjg(1),nlcj,cmask(1:nlci,1:nlcj,1:jpk) ) 
    164          CALL flinclo(numbath) 
    165  
    166          do jk=1,5 
    167             do jj=2,jpj-1 
    168                do ji=2,jpi-1 
    169                   if (tmask(ji,jj,jk).ne.0) then 
    170                      zmaskt=tmask(ji+1,jj,jk)*tmask(ji-1,jj,jk)*tmask(ji,jj+1,jk)    & 
    171                         &          *tmask(ji,jj-1,jk)*tmask(ji,jj,jk+1) 
    172                      if (zmaskt.eq.0) then 
    173                         cmask(ji,jj,jk)=0.1 
    174                      endif 
    175                   endif 
    176                end do 
    177             end do 
    178          end do 
    179  
    180  
    181          ! Extra-halo initialization in MPP 
    182          IF( lk_mpp ) THEN 
    183             DO ji = nlci+1, jpi 
    184                cmask(ji,:,:) = cmask(1,:,:) 
    185             ENDDO 
    186             DO jj = nlcj+1, jpj 
    187                cmask(:,jj,:)=cmask(:,1,:) 
    188             ENDDO 
    189          ENDIF 
    190  
     119      !!    Computation of an island mask to enhance coastal supply of iron 
     120      !!    --------------------------------------------------------------- 
     121 
     122      IF ( bsedinput ) THEN 
     123         IF(lwp) WRITE(numout,*) '  Computation of an island mask to enhance coastal supply of iron ' 
     124         CALL iom_open ( 'bathy.orca.nc', numbath ) 
     125         CALL iom_get  ( numbath, jpdom_data, 'bathy', cmask(:,:,:), jpan ) 
     126 
     127         DO jk = 1, 5 
     128            DO jj = 2, jpjm1 
     129               DO ji = 2, jpim1 
     130                  IF ( tmask(ji,jj,jk) /= 0. ) THEN 
     131                     zmaskt = tmask(ji+1,jj,jk) * tmask(ji-1,jj,jk) * tmask(ji,jj+1,jk)    & 
     132                        &          * tmask(ji,jj-1,jk) * tmask(ji,jj,jk+1) 
     133                     IF ( zmaskt == 0. ) THEN 
     134                        cmask(ji,jj,jk ) = 0.1 
     135                     ENDIF 
     136                  ENDIF 
     137               END DO 
     138            END DO 
     139         END DO 
    191140         DO jk = 1, jpk 
    192141            DO jj = 1, jpj 
    193142               DO ji = 1, jpi 
    194                   expide=min(8.,(fsdept(ji,jj,jk)/500.)**(-1.5)) 
    195                   denitide=-0.9543+0.7662*log(expide)-0.235*log(expide)**2 
    196                   cmask(ji,jj,jk)=cmask(ji,jj,jk)*min(1.,exp(denitide)/0.5) 
     143                  expide   = MIN( 8.,( fsdept(ji,jj,jk) / 500. )**(-1.5) ) 
     144                  denitide = -0.9543 + 0.7662 * LOG( expide ) - 0.235 * LOG( expide )**2 
     145                  cmask(ji,jj,jk) = cmask(ji,jj,jk) * MIN( 1., EXP( denitide ) / 0.5 ) 
    197146               END DO 
    198147            END DO 
    199148         END DO 
    200  
     149          
     150         CALL iom_close( numbath ) 
    201151      ELSE 
    202          cmask(:,:,:)=0. 
     152         cmask(:,:,:) = 0. 
    203153      ENDIF 
    204154 
     
    209159      !!     ------------------------------------------------- 
    210160 
    211       sumdepsi=0. 
    212       DO mo=1,12 
    213          DO jj=2,jpjm1 
    214             DO ji=2,jpim1 
    215                sumdepsi=sumdepsi+dustmo(ji,jj,mo)/(12.*rmoss)*8.8        & 
     161      sumdepsi = 0. 
     162      DO jm = 1, jpmois 
     163         DO jj = 2, jpjm1 
     164            DO ji = 2, jpim1 
     165               sumdepsi = sumdepsi + dustmo(ji,jj,jm)/(12.*rmoss)*8.8        & 
    216166                  *0.075/28.1*e1t(ji,jj)*e2t(ji,jj)*tmask(ji,jj,1) 
    217167            END DO 
     
    472422      !!  A PRECOMPUTED ARRAY CORRESPONDING TO THE ATTENUATION COEFFICIENT 
    473423 
    474       open(49,file='kRGB61.txt',form='formatted') 
    475       do ichl=1,61 
    476          READ(49,*) xtoto,(xkrgb(iband,ichl),iband = 1,3) 
    477       end do 
    478       close(49) 
    479  
    480 #if defined key_off_degrad 
    481  
    482       !! Read volume for degraded regions (DEGINIT) 
    483       !! ------------------------------------------ 
    484  
    485 #    if defined key_vpp 
    486       CALL READ3S(902,facvol,jpi,jpj,jpk) 
    487 #    else 
    488       READ (902) facvol 
    489 #    endif 
    490 #endif 
     424      OPEN( numlight, file = 'kRGB61.txt', form = 'formatted') 
     425      DO ichl = 1,61 
     426         READ(numlight,*) ztoto,(xkrgb(iband,ichl),iband = 1,3) 
     427      END DO 
     428      CLOSE(numlight) 
    491429 
    492430 
  • trunk/NEMO/TOP_SRC/TRP/trcbbc.F90

    r352 r494  
    142142      !!---------------------------------------------------------------------- 
    143143      !! * Modules used 
    144       USE ioipsl 
     144      USE iom 
    145145 
    146146      !! * local declarations 
     
    148148      INTEGER  ::   ji, jj              ! dummy loop indices 
    149149      INTEGER  ::   inum = 11           ! temporary logical unit 
    150       INTEGER  ::   itime               ! temporary integers 
    151       REAL(wp) ::   zdate0, zdt         ! temporary scalars 
    152       REAL(wp), DIMENSION(1) :: zdept   ! temporary workspace 
    153       REAL(wp), DIMENSION(jpidta,jpjdta) ::   & 
    154          zlamt, zphit, zdta   ! temporary workspace 
    155150 
    156151      NAMELIST/namtrcbbc/ngeo_trc_flux, ngeo_trc_flux_const  
     
    193188      CASE ( 2 )                ! variable geothermal heat flux 
    194189         ! read the geothermal fluxes in mW/m2 
    195          clname = 'passivetrc_geothermal_heating' 
    196          itime = 1 
    197          zlamt(:,:) = 0. 
    198          zphit(:,:) = 0. 
    199          IF(lwp) WRITE(numout,*) '             *** variable geothermal heat flux read in ', clname, ' file' 
    200          CALL restini( clname, jpidta, jpjdta, zlamt, zphit, 1, zdept , clname,   & 
    201                        itime, zdate0, zdt, inum , domain_id=nidom ) 
    202          CALL restget( inum, 'heatflow', jpidta, jpjdta, 1, 0, .FALSE., zdta ) 
    203          DO jj = 1, nlcj 
    204             DO ji = 1, nlci 
    205               qgh_trd(ji,jj) = zdta(mig(ji),mjg(jj)) 
    206             END DO 
    207          END DO 
    208  
    209          CALL restclo( inum ) 
     190         CALL iom_open ( 'geothermal_heating_trc.nc', inum ) 
     191         CALL iom_get ( inum, jpdom_data, 'heatflow', qgh_trd ) 
     192         CALL iom_close (inum) 
     193 
    210194         qgh_trd(:,:) = qgh_trd(:,:) * 1.e-3 ! conversion in W/m2 
    211195 
    212196      CASE DEFAULT 
    213          IF(lwp) WRITE(numout,cform_err) 
    214          IF(lwp) WRITE(numout,*) '     bad flag value for ngeo_trc_flux = ', ngeo_trc_flux 
    215          nstop = nstop + 1 
     197         WRITE(ctmp1,*) '     bad flag value for ngeo_flux = ', ngeo_flux 
     198         CALL ctl_stop( ctmp1 ) 
    216199 
    217200      END SELECT 
  • trunk/NEMO/TOP_SRC/TRP/trcdmp.F90

    r433 r494  
    194194 
    195195      CASE DEFAULT 
    196          IF(lwp) WRITE(numout,cform_err) 
    197          IF(lwp) WRITE(numout,*) '          bad flag value for ndmptr = ', ndmptr 
    198          nstop = nstop + 1 
     196         WRITE(ctmp1,*) '          bad flag value for ndmp = ', ndmp 
     197         CALL ctl_stop(ctmp1) 
    199198 
    200199      END SELECT 
     
    213212 
    214213      CASE DEFAULT 
    215          IF(lwp) WRITE(numout,cform_err) 
    216          IF(lwp) WRITE(numout,*) '          bad flag value for nmldmptr = ', nmldmptr 
    217          nstop = nstop + 1 
     214         WRITE(ctmp1,*) '          bad flag value for nmldmp = ', nmldmp 
     215         CALL ctl_stop(ctmp1) 
     216 
    218217 
    219218      END SELECT 
     
    221220 
    222221      ! 3. Damping coefficients initialization 
    223       ! -------------------------------------- 
     222     ! -------------------------------------- 
    224223 
    225224         IF( lzoom ) THEN 
     
    347346      !!---------------------------------------------------------------------- 
    348347      !! * Modules used 
     348      USE iom 
    349349      USE ioipsl 
    350350 
    351351      !! * Local declarations 
    352       INTEGER ::  ji, jj, jk, je, jn     ! dummy loop indices 
    353       INTEGER, PARAMETER ::   jpmois=1 
    354       INTEGER ::   ipi, ipj, ipk       ! temporary integers 
    355       INTEGER ::   ii0, ii1, ij0, ij1  !    "          " 
     352      INTEGER ::  ji, jj, jk, jn    ! dummy loop indices 
     353      INTEGER ::   itime 
     354      INTEGER ::  ii0, ii1, ij0, ij1  !    "          " 
    356355      INTEGER ::   & 
    357356         idmp,     &  ! logical unit for file restoring damping term 
    358357         icot         ! logical unit for file distance to the coast 
    359       INTEGER :: itime, istep(jpmois), ie 
    360       LOGICAL :: llbon 
     358 
    361359      CHARACTER (len=32) ::  clname, clname2, clname3 
    362360      REAL(wp) ::   & 
     
    365363         zsdmp, zbdmp                   !    "         " 
    366364      REAL(wp), DIMENSION(jpk) ::   & 
    367          zdept, zhfac 
     365         gdept, zhfac 
    368366      REAL(wp), DIMENSION(jpi,jpj) ::   & 
    369          zmrs, zlamt, zphit 
     367         zmrs 
    370368      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
    371369         zdct 
     
    401399         ! ... Distance to coast (zdct) 
    402400 
    403          !   ... Test the existance of distance-to-coast file 
    404          itime = jpmois 
    405          ipi = jpiglo 
    406          ipj = jpjglo 
    407          ipk = jpk 
    408          clname = 'dist.coast.trc' 
    409          DO je = 1,32 
    410             IF( clname(je:je) == ' ' ) go to 140 
    411          END DO 
    412 140      CONTINUE 
    413          ie = je 
    414          clname2 = clname(1:ie-1)//".nc" 
    415          INQUIRE( FILE = clname2, EXIST = llbon ) 
    416  
    417          IF ( llbon ) THEN 
    418  
    419             !   ... Read file distance to coast if possible 
    420             CALL flinopen( clname, mig(1), nlci, mjg(1), nlcj, .FALSE.,   & 
    421                ipi, ipj, ipk, zlamt, zphit, zdept, jpmois,   & 
    422                istep, zdate0, rdt, icot ) 
    423             CALL flinget( icot, 'Tcoast', jpidta, jpjdta, jpk,    & 
    424                jpmois, 1, 1, mig(1), nlci, mjg(1), nlcj, zdct(1:nlci,1:nlcj,1:jpk) ) 
    425             CALL flinclo( icot ) 
    426             IF(lwp)WRITE(numout,*) '    ** : File trc.dist.coast.nc read' 
    427  
     401         IF(lwp) WRITE(numout,*) 
     402         IF(lwp) WRITE(numout,*) ' dtacof : distance to coast file' 
     403         CALL iom_open ( 'dist.coast.trc.nc', icot ) 
     404         IF( icot > 0 ) THEN 
     405            CALL iom_get ( icot, jpdom_data, 'Tcoast', zdct ) 
     406            CALL iom_close (icot) 
    428407         ELSE 
    429  
    430408            !   ... Compute and save the distance-to-coast array (output in zdct) 
    431             CALL cofdis ( zdct ) 
    432  
     409            CALL cofdis( zdct ) 
    433410         ENDIF 
     411 
    434412 
    435413         ! ... Compute arrays resto  
     
    598576            !                                       ! ======================== 
    599577         CASE ( 025 )                               !  ORCA_R025 configuration  
    600             !                                       ! ======================== 
    601             IF(lwp) WRITE(numout,cform_err) 
    602             IF(lwp) WRITE(numout,*)' Not yet implemented in ORCA_R025' 
    603             nstop = nstop + 1 
     578 
     579            CALL ctl_stop( ' Not yet implemented in ORCA_R025' )  
    604580 
    605581         END SELECT 
     
    620596         !     No damping 
    621597         !    ------------ 
    622          IF(lwp) WRITE(numout,cform_err) 
    623          IF(lwp) WRITE(numout,*) 'Choose a correct value of ndmptr or DO NOT defined key_trcdmp' 
    624          nstop = nstop + 1 
     598         CALL ctl_stop( 'Choose a correct value of ndmp or DO NOT defined key_tradmp' ) 
     599 
    625600      ENDIF 
    626601 
     
    704679      IF(lwp) WRITE(numout,*) '~~~~~~' 
    705680      IF(lwp) WRITE(numout,*) 
    706       IF( lk_mpp ) THEN 
    707          IF(lwp) WRITE(numout,cform_err) 
    708          IF(lwp) WRITE(numout,*) '         Computation not yet implemented with key_mpp_...' 
    709          IF(lwp) WRITE(numout,*) '         Rerun the code on another computer or ' 
    710          IF(lwp) WRITE(numout,*) '         create the "dist.coast.nc" file using IDL' 
    711          nstop = nstop + 1 
    712       ENDIF 
     681      IF( lk_mpp ) & 
     682           & CALL ctl_stop('         Computation not yet implemented with key_mpp_...', & 
     683           &               '         Rerun the code on another computer or ', & 
     684           &               '         create the "dist.coast.nc" file using IDL' ) 
     685 
    713686 
    714687      pdct(:,:,:) = 0.e0 
  • trunk/NEMO/TOP_SRC/trcrst.F90

    r433 r494  
    7171      !!------------------------------------------------------------------------ 
    7272      !! * Modules used 
    73       USE ioipsl 
     73      USE iom 
    7474 
    7575 
    7676      !! local declarations 
    7777      !! ================== 
    78       LOGICAL ::  llog       !!! 
    79       CHARACTER (len=32) :: clname1,clname2 
    80       CHARACTER (len=32) :: clname = 'restart.trc' 
    81       CHARACTER (len=12) :: clvnames(80)   
    82  
    83       INTEGER :: ino1,jn,iarak0,iarak1,          & 
    84          ji, jj, jk,                   & 
    85          itime, ibvar 
    86       REAL(wp) :: caralk,bicarb,zdt,        &      
    87          zdate0 
    88       REAL(wp) ::   zdept(jpk), zlamt(jpi,jpj), zphit(jpi,jpj) 
    89  
    90       REAL(wp), DIMENSION(3) :: zinfo 
     78 
     79      INTEGER :: & 
     80         ji, jj, jk, jn   
     81      INTEGER  ::   & 
     82         inum, iarak0                 ! temporary logical unit 
     83      REAL(wp), DIMENSION(1, 1, 3)  ::   zinfo 
     84 
     85      CHARACTER (len=32) :: clname1,clname2,clname 
     86      REAL(wp) :: caralk,bicarb 
    9187 
    9288#if defined key_trc_pisces  
    93 #if ! defined key_cfg_1d && ( defined key_orca_r4 || defined key_orca_r2 || defined key_orca_r05 || defined key_orca_r025 ) 
    94       REAL(wp) ::   zareatot, zpo4tot 
    95 #endif 
     89#   if ! defined key_cfg_1d && ( defined key_orca_r4 || defined key_orca_r2 || defined key_orca_r05 || defined key_orca_r025 ) 
     90      REAL(wp) ::   zareatot, ztrasum 
     91#   endif 
    9692#endif 
    9793 
     
    106102         iarak0 = 1 
    107103      ELSE 
    108          iarak0=0 
     104         iarak0 = 0 
    109105      ENDIF 
    110106 
     
    117113      IF(lwp) WRITE(numout,*) '   with the time nit000 : ',nit000 
    118114      IF(lwp) THEN 
    119          IF(iarak0.eq.1) then 
     115         IF( iarak0 == 1 ) THEN 
    120116            WRITE(numout,*) '   and before fields for Arakawa sheme ' 
    121117         ENDIF 
     
    142138 
    143139 
    144       !! 1. READ nutrst 
    145       !! -------------- 
    146       !! ... first information 
    147       !! --------------------- 
    148       itime=0 
    149       llog=.false.           !!! 
    150       zlamt(:,:) = 0.e0 
    151       zphit(:,:) = 0.e0 
    152       zdept(:)   = 0.e0 
    153       CALL restini(clname,jpi,jpj,zlamt,zphit,jpk,zdept,clname         &  
    154          &           ,itime,zdate0,zdt,nutrst,domain_id=nidom) 
    155  
    156       CALL ioget_vname(nutrst, ibvar, clvnames) 
    157       CALL restget(nutrst,'info',1,1,3,0,llog,zinfo) 
    158       ino1  = nint(zinfo(1)) 
    159       iarak1 = nint(zinfo(3)) 
    160  
    161       IF(lwp) WRITE(numout,*) ' ' 
    162       IF(lwp) WRITE(numout,*) ' READ nutrst with ' 
    163       IF(lwp) WRITE(numout,*) '   number job is  : ',ino1 
    164       IF(lwp) WRITE(numout,*) '   with the time it : ',nint(zinfo(2)) 
    165       IF(lwp) THEN 
    166          IF(iarak1.eq.1) then 
    167             WRITE(numout,*) '   and before fields for Arakawa sheme ' 
    168          ENDIF 
    169       ENDIF 
    170       IF(lwp) WRITE(numout,*) '   number of variables   : ', ibvar 
    171       IF(lwp) WRITE(numout,*) '   NetCDF variables      : ' 
    172       IF(lwp) WRITE(numout,*) ' ',clvnames (:ibvar) 
    173       IF(lwp) WRITE(numout,*) ' ' 
    174  
    175       !! 1.2 control of date 
     140 
     141      CALL iom_open ( 'restart.trc', inum ) 
     142 
     143      CALL iom_get ( inum, jpdom_unknown, 'info', zinfo ) 
     144 
     145      IF(lwp) WRITE(numout,*) 
     146      IF(lwp) WRITE(numout,*) ' Info on the restart file read : ' 
     147      IF(lwp) WRITE(numout,*) '   job number          : ', NINT( zinfo(1, 1, 1) ) 
     148      IF(lwp) WRITE(numout,*) '   time-step           : ', NINT( zinfo(1, 1, 2) ) 
     149      IF(lwp) WRITE(numout,*) '   arakawa option      : ', NINT( zinfo(1, 1, 3) ) 
     150      IF(lwp) WRITE(numout,*) 
     151 
     152 
     153      !! control of date 
    176154      !! ------------------- 
    177155 
    178       IF( nit000- NINT( zinfo(2) ) /= 1 .AND. nrsttr /= 0 ) THEN 
    179          IF(lwp) THEN 
    180             WRITE(numout,*) ' ===>>>> : problem with nit000 for the',    &   
    181                ' passive tracer restart' 
    182             WRITE(numout,*) ' =======                              ',    &     
    183                ' ======================' 
    184             WRITE(numout,*) ' we stop. verify the FILE' 
    185             WRITE(numout,*) ' or rerun with the value  0 for the' 
    186             WRITE(numout,*) ' control of time PARAMETER   nrstdt' 
    187             WRITE(numout,*) ' ' 
    188          ENDIF 
    189          STOP 'trc_rst'       !! 
    190       ENDIF 
    191  
    192       !! 1.3 Control of the sheme 
     156      IF( nittrc000 - NINT( zinfo( 1, 1, 2 ) ) /= 1 .AND. nrsttr /= 0 )  & 
     157           & CALL ctl_stop( ' ===>>>> : problem with nit000 for the restart', & 
     158           & ' verify the restart file or rerun with nrstdt = 0 (namelist)' ) 
     159 
     160      !! Control of the scheme 
    193161      !! ------------------------ 
    194162 
    195       IF(iarak0.ne.iarak1) THEN 
    196          IF(lwp) THEN 
    197             WRITE(numout,*) ' ===>>>> : problem with the',       &    
    198                ' passive tracer restart file' 
    199             WRITE(numout,*) ' =======                              ',        &  
    200                ' ===========================' 
    201             WRITE(numout,*) ' we stop. verify the FILE' 
    202             WRITE(numout,*) ' before field required IF 1=',iarak0 
    203             WRITE(numout,*) ' before field present in file IF 1=',           &  
    204                iarak1 
    205             WRITE(numout,*) ' ' 
    206          ENDIF 
    207          STOP 'trc_rst'       !!!!!    AVERIFIER AU NIV F90' 
    208       ENDIF 
     163      IF( iarak0 /= NINT( zinfo(1, 1, 3 ) ) ) & 
     164           & CALL ctl_stop( ' ===>>>> : problem with advection scheme', & 
     165           & ' it must be the same type for both restart and previous run', & 
     166           & ' centered or euler '  ) 
    209167 
    210168 
     
    212170      !! --------------------------------------------------------------- 
    213171 
    214       DO jn=1,jptra 
    215          clname='TRN'//ctrcnm(jn) 
    216          CALL restget(nutrst,clname,jpi,jpj,jpk,0,llog,trn(:,:,:,jn)) 
     172      DO jn = 1, jptra 
     173         clname = 'TRN'//ctrcnm(jn) 
     174         CALL iom_get( inum, jpdom_local, clname, trn(:,:,:,jn)   )  
    217175      END DO 
    218176 
    219       DO jn=1,jptra 
    220          clname='TRB'//ctrcnm(jn) 
    221          CALL restget(nutrst,clname,jpi,jpj,jpk,0,llog,trb(:,:,:,jn)) 
     177      DO jn = 1, jptra 
     178         clname = 'TRB'//ctrcnm(jn) 
     179         CALL iom_get( inum, jpdom_local, clname, trb(:,:,:,jn)   )  
    222180      END DO 
    223181 
    224  
    225182#if defined key_trc_lobster1 
    226       clname='SEDB'//ctrcnm(jpdet) 
    227       clname1='SEDN'//ctrcnm(jpdet) 
    228       CALL restget(nutrst,clname,jpi,jpj,1,0,llog,sedpocb(:,:)) 
    229       CALL restget(nutrst,clname1,jpi,jpj,1,0,llog,sedpocn(:,:)) 
     183      clname  = 'SEDB'//ctrcnm(jpdet) 
     184      clname1 = 'SEDN'//ctrcnm(jpdet) 
     185      CALL iom_get( inum, jpdom_local, clname , sedpocb(:,:) )  
     186      CALL iom_get( inum, jpdom_local, clname1, sedpocn(:,:) )  
     187 
    230188#elif defined key_trc_pisces 
    231       clname='Silicalim' 
    232       CALL restget(nutrst,clname,jpi,jpj,1,0,llog,xksi) 
    233       xksimax=xksi 
    234  
    235       clname='SED'//ctrcnm(jppoc) 
    236       clname1='SED'//ctrcnm(jpcal) 
    237       clname2='SED'//ctrcnm(jpsil) 
    238       CALL restget(nutrst,clname1,jpi,jpj,1,0,llog,sedcal(:,:)) 
    239       CALL restget(nutrst,clname2,jpi,jpj,1,0,llog,sedsil(:,:)) 
    240       CALL restget(nutrst,clname,jpi,jpj,1,0,llog,sedpoc(:,:)) 
     189      clname = 'Silicalim' 
     190      CALL iom_get( inum, jpdom_local, clname, xksi(:,:) )  
     191      xksimax = xksi 
     192 
     193      clname  = 'SED'//ctrcnm(jppoc) 
     194      clname1 = 'SED'//ctrcnm(jpcal) 
     195      clname2 = 'SED'//ctrcnm(jpsil) 
     196 
     197      CALL iom_get( inum, jpdom_local, clname , sedpoc(:,:) )  
     198      CALL iom_get( inum, jpdom_local, clname1, sedcal(:,:) )  
     199      CALL iom_get( inum, jpdom_local, clname2, sedsil(:,:) )  
    241200 
    242201#elif defined key_cfc 
    243       clname='qint' 
    244       CALL restget(nutrst,clname,jpi,jpj,jptra,0,llog,qint(:,:,:)) 
    245       clname1='qtr' 
    246       CALL restget(nutrst,clname1,jpi,jpj,jptra,0,llog,qtr(:,:,:))          
     202      clname  = 'qint' 
     203      clname1 = 'qtr' 
     204 
     205      CALL iom_get( inum, jpdom_local, clname , qint(:,:,:) )  
     206      CALL iom_get( inum, jpdom_local, clname1, qtr (:,:,:) )         
    247207#endif 
    248208 
     
    255215         DO jj = 1, jpj 
    256216            DO ji = 1, jpi 
    257                zareatot = zareatot + tmask(ji,jj,jk) * tmask_i(ji,jj) * & 
    258                   &                 e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk)  
     217               zareatot = zareatot + tmask(ji,jj,jk) * tmask_i(ji,jj)  & 
     218#if defined key_off_degrad 
     219                  &                * facvol(ji,jj,jk)    & 
     220#endif 
     221 
     222                  &                * e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk)  
    259223            END DO 
    260224         END DO 
     
    265229      END IF 
    266230 
    267       zpo4tot = 0. 
     231      ztrasum = 0. 
    268232      DO jk = 1, jpk 
    269233         DO jj = 1, jpj 
    270234            DO ji = 1, jpi 
    271                zpo4tot = zpo4tot + trn(ji,jj,jk,jptal) * tmask(ji,jj,jk) * tmask_i(ji,jj) *   & 
    272                   &                e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 
     235               ztrasum = ztrasum + trn(ji,jj,jk,jptal) * tmask(ji,jj,jk) * tmask_i(ji,jj)    & 
     236#if defined key_off_degrad 
     237                  &              * facvol(ji,jj,jk)   & 
     238#endif 
     239 
     240                  &              * e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 
    273241            END DO 
    274242         END DO 
     
    276244 
    277245      IF( lk_mpp ) THEN  
    278          CALL mpp_sum( zpo4tot )     ! sum over the global domain   
     246         CALL mpp_sum( ztrasum )     ! sum over the global domain   
    279247      END IF 
    280248 
    281       WRITE(0,*) 'TALK moyen ', zpo4tot/zareatot*1E6 
    282       zpo4tot = zpo4tot/zareatot*1E6 
    283       trn(:,:,:,jptal) = trn(:,:,:,jptal)*2391./zpo4tot 
    284  
    285       zpo4tot = 0. 
     249      WRITE(0,*) 'TALK moyen ', ztrasum/zareatot*1E6 
     250      ztrasum = ztrasum/zareatot*1E6 
     251      trn(:,:,:,jptal) = trn(:,:,:,jptal)*2391./ztrasum 
     252 
     253      ztrasum = 0. 
    286254      DO jk = 1, jpk 
    287255         DO jj = 1, jpj 
    288256            DO ji = 1, jpi 
    289                zpo4tot = zpo4tot + trn(ji,jj,jk,jppo4) * tmask(ji,jj,jk) * tmask_i(ji,jj) *   & 
    290                   &                e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 
     257               ztrasum = ztrasum + trn(ji,jj,jk,jppo4) * tmask(ji,jj,jk) * tmask_i(ji,jj)  & 
     258#if defined key_off_degrad 
     259                  &              * facvol(ji,jj,jk)   & 
     260#endif 
     261 
     262                  &              * e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 
    291263            END DO 
    292264         END DO 
     
    294266 
    295267      IF( lk_mpp ) THEN  
    296          CALL mpp_sum( zpo4tot )     ! sum over the global domain   
     268         CALL mpp_sum( ztrasum )     ! sum over the global domain   
    297269      END IF 
    298270 
    299271 
    300       WRITE(0,*) 'PO4 moyen ', zpo4tot/zareatot*1E6/122. 
    301       zpo4tot = zpo4tot/zareatot*1E6/122. 
    302       trn(:,:,:,jppo4) = trn(:,:,:,jppo4)*2.165/zpo4tot 
    303  
    304       zpo4tot = 0. 
     272      WRITE(0,*) 'PO4 moyen ', ztrasum/zareatot*1E6/122. 
     273      ztrasum = ztrasum/zareatot*1E6/122. 
     274      trn(:,:,:,jppo4) = trn(:,:,:,jppo4)*2.165/ztrasum 
     275 
     276      ztrasum = 0. 
    305277      DO jk = 1, jpk 
    306278         DO jj = 1, jpj 
    307279            DO ji = 1, jpi 
    308                zpo4tot = zpo4tot + trn(ji,jj,jk,jpno3) * tmask(ji,jj,jk) * tmask_i(ji,jj) *   & 
    309                   &                e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 
     280               ztrasum = ztrasum + trn(ji,jj,jk,jpno3) * tmask(ji,jj,jk) * tmask_i(ji,jj)  & 
     281#if defined key_off_degrad 
     282                  &              * facvol(ji,jj,jk)   & 
     283#endif 
     284 
     285                  &              * e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 
    310286            END DO 
    311287         END DO 
     
    313289 
    314290      IF( lk_mpp ) THEN  
    315          CALL mpp_sum( zpo4tot )     ! sum over the global domain   
     291         CALL mpp_sum( ztrasum )     ! sum over the global domain   
    316292      END IF 
    317293 
    318294 
    319       WRITE(0,*) 'NO3 moyen ', zpo4tot/zareatot*1E6/7.6 
    320       zpo4tot = zpo4tot/zareatot*1E6/7.6 
    321       trn(:,:,:,jpno3) = trn(:,:,:,jpno3)*30.9/zpo4tot 
    322  
    323       zpo4tot = 0. 
     295      WRITE(0,*) 'NO3 moyen ', ztrasum/zareatot*1E6/7.6 
     296      ztrasum = ztrasum/zareatot*1E6/7.6 
     297      trn(:,:,:,jpno3) = trn(:,:,:,jpno3)*30.9/ztrasum 
     298 
     299      ztrasum = 0. 
    324300      DO jk = 1, jpk 
    325301         DO jj = 1, jpj 
    326302            DO ji = 1, jpi 
    327                zpo4tot = zpo4tot + trn(ji,jj,jk,jpsil) * tmask(ji,jj,jk) * tmask_i(ji,jj) *   & 
    328                   &                e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 
     303               ztrasum = ztrasum + trn(ji,jj,jk,jpsil) * tmask(ji,jj,jk) * tmask_i(ji,jj)   & 
     304#if defined key_off_degrad 
     305                  &              * facvol(ji,jj,jk)   & 
     306#endif 
     307 
     308                  &              * e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 
    329309            END DO 
    330310         END DO 
     
    332312 
    333313      IF( lk_mpp ) THEN  
    334          CALL mpp_sum( zpo4tot )     ! sum over the global domain   
     314         CALL mpp_sum( ztrasum )     ! sum over the global domain   
    335315      END IF 
    336316 
    337       WRITE(0,*) 'SiO3 moyen ', zpo4tot/zareatot*1E6 
    338       zpo4tot = zpo4tot/zareatot*1E6 
    339       trn(:,:,:,jpsil) = MIN( 400E-6,trn(:,:,:,jpsil)*91.51/zpo4tot)  
     317      WRITE(0,*) 'SiO3 moyen ', ztrasum/zareatot*1E6 
     318      ztrasum = ztrasum/zareatot*1E6 
     319      trn(:,:,:,jpsil) = MIN( 400E-6,trn(:,:,:,jpsil)*91.51/ztrasum)  
    340320 
    341321#endif 
     
    357337      ENDDO 
    358338#endif 
     339      trb(:,:,:,:) = trn(:,:,:,:) 
     340 
     341      CALL iom_close( inum ) 
     342 
    359343 
    360344   END SUBROUTINE trc_rst 
     
    432416      !! --------------------------- 
    433417 
    434       IF( kt == nit000 ) THEN 
     418      IF( kt == nittrc000 ) THEN 
    435419         IF(lwp) WRITE(numout,*) 
    436420         IF(lwp) WRITE(numout,*) 'trc_wri : write passive tracers restart.output NetCDF file' 
     
    518502         itime=0 
    519503         CALL ymds2ju(nyear,nmonth,nday,0.0,zdate0) 
    520          CALL restini('NONE',jpi,jpj,glamt,gphit,jpk,gdept,clname           & 
     504         CALL restini('NONE',jpi,jpj,glamt,gphit,jpk,gdept_0,clname           & 
    521505            &        ,itime,zdate0,rdt*nstock,nutwrs,domain_id=nidom) 
    522506 
Note: See TracChangeset for help on using the changeset viewer.