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 2452 for branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfgls.F90 – NEMO

Ignore:
Timestamp:
2010-12-05T12:53:44+01:00 (13 years ago)
Author:
gm
Message:

v3.3beta: move GLS restart write entirely in zdfgls.F90

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfgls.F90

    r2450 r2452  
    11681168 
    11691169   SUBROUTINE gls_rst( kt, cdrw ) 
    1170      !!--------------------------------------------------------------------- 
    1171      !!                   ***  ROUTINE ts_rst  *** 
    1172      !!                      
    1173      !! ** Purpose :   Read or write TKE file (en) in restart file 
    1174      !! 
    1175      !! ** Method  :   use of IOM library 
    1176      !!                if the restart does not contain TKE, en is either  
    1177      !!                set to rn_emin or recomputed (nn_igls/=0) 
    1178      !!---------------------------------------------------------------------- 
    1179      INTEGER         , INTENT(in) ::   kt         ! ocean time-step 
    1180      CHARACTER(len=*), INTENT(in) ::   cdrw       ! "READ"/"WRITE" flag 
    1181      ! 
    1182      INTEGER ::   jit, jk   ! dummy loop indices 
    1183      INTEGER ::   id1, id2, id3, id4, id5, id6, id7, id8 
    1184      INTEGER ::   ji, jj, ikbu, ikbv, ikbum1, ikbvm1 
    1185      REAL(wp)::   cbx, cby 
    1186      !!---------------------------------------------------------------------- 
    1187      ! 
    1188      IF( TRIM(cdrw) == 'READ' ) THEN        ! Read/initialise  
    1189         !                                   ! --------------- 
    1190         IF( ln_rstart ) THEN                   !* Read the restart file 
    1191            id1 = iom_varid( numror, 'en'   , ldstop = .FALSE. ) 
    1192            id2 = iom_varid( numror, 'avt'  , ldstop = .FALSE. ) 
    1193            id3 = iom_varid( numror, 'avm'  , ldstop = .FALSE. ) 
    1194            id4 = iom_varid( numror, 'avmu' , ldstop = .FALSE. ) 
    1195            id5 = iom_varid( numror, 'avmv' , ldstop = .FALSE. ) 
    1196            id6 = iom_varid( numror, 'mxln' , ldstop = .FALSE. ) 
    1197            id7 = iom_varid( numror, 'wbotu', ldstop = .FALSE. ) 
    1198            id8 = iom_varid( numror, 'wbotv', ldstop = .FALSE. ) 
    1199            ! 
    1200            IF( MIN( id1, id2, id3, id4, id5, id6, id7, id8 ) > 0 ) THEN        ! all required arrays exist 
    1201               CALL iom_get( numror, jpdom_autoglo, 'en'    , en     ) 
    1202               CALL iom_get( numror, jpdom_autoglo, 'avt'   , avt    ) 
    1203               CALL iom_get( numror, jpdom_autoglo, 'avm'   , avm    ) 
    1204               CALL iom_get( numror, jpdom_autoglo, 'avmu'  , avmu   ) 
    1205               CALL iom_get( numror, jpdom_autoglo, 'avmv'  , avmv   ) 
    1206               CALL iom_get( numror, jpdom_autoglo, 'mxln'  , mxln   ) 
    1207               CALL iom_get( numror, jpdom_autoglo, 'wbotu' , wbotu  ) 
    1208               CALL iom_get( numror, jpdom_autoglo, 'wbotv' , wbotv  ) 
    1209            ELSE                         
    1210               IF(lwp) WRITE(numout,*) ' ===>>>> : previous run without gls scheme, en and mxln computed by iterative loop' 
    1211               IF(lwp) WRITE(numout,*) ' ===>>>> : The bottom stresses are estimated'  
    1212               en  (:,:,:) = rn_emin 
    1213               mxln(:,:,:) = 0.001         
    1214               ! Initialize bottom stresses 
    1215               DO jj = 2, jpjm1 
    1216                 DO ji = fs_2, fs_jpim1   ! vector opt. 
    1217                   ikbu   = mbku(ji,jj) + 1    ! k   bottom level of uw-point 
    1218                   ikbum1 = mbku(ji,jj)        ! k-1 bottom level of u -point, but >=1 
    1219                   ikbv   = mbkv(ji,jj) + 1 
    1220                   ikbvm1 = mbkv(ji,jj) 
    1221                   cbx = avmu(ji,jj,ikbu) / fse3uw(ji,jj,ikbu) 
    1222                   cby = avmv(ji,jj,ikbv) / fse3vw(ji,jj,ikbv) 
    1223                   wbotu(ji,jj) = -cbx * un(ji,jj,ikbum1) * umask(ji,jj,1) 
    1224                   wbotv(ji,jj) = -cby * vn(ji,jj,ikbvm1) * vmask(ji,jj,1) 
    1225                 END DO 
    1226               END DO 
    1227               DO jit = nit000 + 1, nit000 + 10   ;   CALL zdf_gls( jit )   ;   END DO 
    1228            ENDIF 
    1229         ELSE                                   !* Start from rest 
    1230            IF(lwp) WRITE(numout,*) ' ===>>>> : Initialisation of en and mxln by background values' 
    1231            IF(lwp) WRITE(numout,*) ' ===>>>> : The bottom stresses are estimated' 
    1232            en  (:,:,:) = rn_emin 
    1233            mxln(:,:,:) = 0.001        
    1234            ! Initialize bottom stresses 
    1235            DO jj = 2, jpjm1 
    1236               DO ji = fs_2, fs_jpim1   ! vector opt. 
    1237                  ikbu   = mbku(ji,jj) + 1    ! k   bottom level of uw-point 
    1238                  ikbum1 = mbku(ji,jj)        ! k-1 bottom level of u -point, but >=1 
    1239                  ikbv   = mbkv(ji,jj) + 1 
    1240                  ikbvm1 = mbkv(ji,jj) 
    1241                  cbx = avmu(ji,jj,ikbu) / fse3uw(ji,jj,ikbu) 
    1242                  cby = avmv(ji,jj,ikbv) / fse3vw(ji,jj,ikbv) 
    1243                  wbotu(ji,jj) = -cbx * un(ji,jj,ikbum1) * umask(ji,jj,1) 
    1244                  wbotv(ji,jj) = -cby * vn(ji,jj,ikbvm1) * vmask(ji,jj,1) 
    1245               END DO 
    1246            END DO 
    1247         ENDIF 
    1248         ! 
    1249      ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN   ! Create restart file 
    1250         !                                   ! ------------------- 
    1251         IF(lwp) WRITE(numout,*) '---- gls-rst ----' 
    1252         CALL iom_rstput( kt, nitrst, numrow, 'en'   , en    ) 
    1253         CALL iom_rstput( kt, nitrst, numrow, 'avt'  , avt   ) 
    1254         CALL iom_rstput( kt, nitrst, numrow, 'avm'  , avm   ) 
    1255         CALL iom_rstput( kt, nitrst, numrow, 'avmu' , avmu  ) 
    1256         CALL iom_rstput( kt, nitrst, numrow, 'avmv' , avmv  ) 
    1257         CALL iom_rstput( kt, nitrst, numrow, 'mxln' , mxln  ) 
    1258         ! 
    1259      ENDIF 
    1260      ! 
     1170      !!--------------------------------------------------------------------- 
     1171      !!                   ***  ROUTINE ts_rst  *** 
     1172      !!                      
     1173      !! ** Purpose :   Read or write TKE file (en) in restart file 
     1174      !! 
     1175      !! ** Method  :   use of IOM library 
     1176      !!                if the restart does not contain TKE, en is either  
     1177      !!                set to rn_emin or recomputed (nn_igls/=0) 
     1178      !!---------------------------------------------------------------------- 
     1179      INTEGER         , INTENT(in) ::   kt         ! ocean time-step 
     1180      CHARACTER(len=*), INTENT(in) ::   cdrw       ! "READ"/"WRITE" flag 
     1181      ! 
     1182      INTEGER ::   jit, jk   ! dummy loop indices 
     1183      INTEGER ::   id1, id2, id3, id4, id5, id6, id7, id8 
     1184      INTEGER ::   ji, jj, ikbu, ikbv 
     1185      REAL(wp)::   cbx, cby 
     1186      !!---------------------------------------------------------------------- 
     1187      ! 
     1188      IF( TRIM(cdrw) == 'READ' ) THEN        ! Read/initialise  
     1189         !                                   ! --------------- 
     1190         IF( ln_rstart ) THEN                   !* Read the restart file 
     1191            id1 = iom_varid( numror, 'en'   , ldstop = .FALSE. ) 
     1192            id2 = iom_varid( numror, 'avt'  , ldstop = .FALSE. ) 
     1193            id3 = iom_varid( numror, 'avm'  , ldstop = .FALSE. ) 
     1194            id4 = iom_varid( numror, 'avmu' , ldstop = .FALSE. ) 
     1195            id5 = iom_varid( numror, 'avmv' , ldstop = .FALSE. ) 
     1196            id6 = iom_varid( numror, 'mxln' , ldstop = .FALSE. ) 
     1197            id7 = iom_varid( numror, 'wbotu', ldstop = .FALSE. ) 
     1198            id8 = iom_varid( numror, 'wbotv', ldstop = .FALSE. ) 
     1199            ! 
     1200            IF( MIN( id1, id2, id3, id4, id5, id6, id7, id8 ) > 0 ) THEN        ! all required arrays exist 
     1201               CALL iom_get( numror, jpdom_autoglo, 'en'    , en     ) 
     1202               CALL iom_get( numror, jpdom_autoglo, 'avt'   , avt    ) 
     1203               CALL iom_get( numror, jpdom_autoglo, 'avm'   , avm    ) 
     1204               CALL iom_get( numror, jpdom_autoglo, 'avmu'  , avmu   ) 
     1205               CALL iom_get( numror, jpdom_autoglo, 'avmv'  , avmv   ) 
     1206               CALL iom_get( numror, jpdom_autoglo, 'mxln'  , mxln   ) 
     1207               CALL iom_get( numror, jpdom_autoglo, 'wbotu' , wbotu  ) 
     1208               CALL iom_get( numror, jpdom_autoglo, 'wbotv' , wbotv  ) 
     1209            ELSE                         
     1210               IF(lwp) WRITE(numout,*) ' ===>>>> : previous run without gls scheme, en and mxln computed by iterative loop' 
     1211               IF(lwp) WRITE(numout,*) ' ===>>>> : The bottom stresses are estimated'  
     1212               en  (:,:,:) = rn_emin 
     1213               mxln(:,:,:) = 0.001         
     1214               ! Initialize bottom stresses 
     1215               DO jj = 2, jpjm1 
     1216                  DO ji = fs_2, fs_jpim1   ! vector opt. 
     1217                     ikbu = mbku(ji,jj)         ! bottom ocean level of u-point 
     1218                     ikbv = mbkv(ji,jj) 
     1219                     cbx  = avmu(ji,jj,ikbu+1) / fse3uw(ji,jj,ikbu+1) 
     1220                     cby  = avmv(ji,jj,ikbv+1) / fse3vw(ji,jj,ikbv+1) 
     1221                     wbotu(ji,jj) = -cbx * un(ji,jj,ikbu) * umask(ji,jj,1) 
     1222                     wbotv(ji,jj) = -cby * vn(ji,jj,ikbv) * vmask(ji,jj,1) 
     1223                  END DO 
     1224               END DO 
     1225               DO jit = nit000 + 1, nit000 + 10   ;   CALL zdf_gls( jit )   ;   END DO 
     1226            ENDIF 
     1227         ELSE                                   !* Start from rest 
     1228            IF(lwp) WRITE(numout,*) ' ===>>>> : Initialisation of en and mxln by background values' 
     1229            IF(lwp) WRITE(numout,*) ' ===>>>> : The bottom stresses are estimated' 
     1230            en  (:,:,:) = rn_emin 
     1231            mxln(:,:,:) = 0.001        
     1232            ! Initialize bottom stresses 
     1233            DO jj = 2, jpjm1 
     1234               DO ji = fs_2, fs_jpim1   ! vector opt. 
     1235                  ikbu = mbku(ji,jj)            ! bottom ocean level of u-point 
     1236                  ikbv = mbkv(ji,jj) 
     1237                  cbx  = avmu(ji,jj,ikbu+1) / fse3uw(ji,jj,ikbu+1) 
     1238                  cby  = avmv(ji,jj,ikbv+1) / fse3vw(ji,jj,ikbv+1) 
     1239                  wbotu(ji,jj) = -cbx * un(ji,jj,ikbu) * umask(ji,jj,1) 
     1240                  wbotv(ji,jj) = -cby * vn(ji,jj,ikbv) * vmask(ji,jj,1) 
     1241               END DO 
     1242            END DO 
     1243         ENDIF 
     1244         ! 
     1245      ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN   ! Create restart file 
     1246         !                                   ! ------------------- 
     1247         IF(lwp) WRITE(numout,*) '---- gls-rst ----' 
     1248         CALL iom_rstput( kt, nitrst, numrow, 'en'   , en    ) 
     1249         CALL iom_rstput( kt, nitrst, numrow, 'avt'  , avt   ) 
     1250         CALL iom_rstput( kt, nitrst, numrow, 'avm'  , avm   ) 
     1251         CALL iom_rstput( kt, nitrst, numrow, 'avmu' , avmu  ) 
     1252         CALL iom_rstput( kt, nitrst, numrow, 'avmv' , avmv  ) 
     1253         CALL iom_rstput( kt, nitrst, numrow, 'mxln' , mxln  ) 
     1254         CALL iom_rstput( kt, nitrst, numrow, 'wbotu' , wbotu ) 
     1255         CALL iom_rstput( kt, nitrst, numrow, 'wbotv' , wbotv ) 
     1256         ! 
     1257      ENDIF 
     1258      ! 
    12611259   END SUBROUTINE gls_rst 
    12621260 
Note: See TracChangeset for help on using the changeset viewer.