C $Header: /u/gcmpack/MITgcm/pkg/ecco/ecco_readparms.F,v 1.95 2017/08/09 15:23:38 mlosch Exp $
C $Name: $
#include "ECCO_OPTIONS.h"
subroutine ECCO_READPARMS( mythid )
c ==================================================================
c SUBROUTINE ecco_readparms
c ==================================================================
c
c o This routine initialises the package cost.
c started: Ralf Giering 18-Jan-2001
c
c ==================================================================
c SUBROUTINE ecco_readparms
c ==================================================================
implicit none
c == global variables ==
#include "EEPARAMS.h"
#include "SIZE.h"
#include "GRID.h"
#include "PARAMS.h"
#ifdef ALLOW_ECCO
# ifdef ECCO_CTRL_DEPRECATED
# include "ecco_cost.h"
else
# include "ecco.h"
# include "ecco_local_params.h"
# endif
#endif
#ifdef ALLOW_CTRL
# include "CTRL_OBCS.h"
#endif
#ifdef ALLOW_CAL
# include "cal.h"
#endif
c == routine arguments ==
integer mythid
c == local variables ==
C msgBuf - Informational/error meesage buffer
C iUnit - Work variable for IO unit number
CHARACTER*(MAX_LEN_MBUF) msgBuf
INTEGER k, k2, iUnit, num_file, num_var
#ifdef ALLOW_GENCOST_CONTRIBUTION
INTEGER IL, kk, gencost_k3d, gencost_msk_k3d, ioUnit
CHARACTER*(128) tempfile
LOGICAL exst
_RS dummyRS(1)
#endif
Catn-- retired parameters
character*(MAX_LEN_FNAM) topexmeanfile
integer nRetired
c == external functions ==
integer ilnblnk
external
c == end of interface ==
c-- Read the namelist input.
namelist //ecco_cost_nml
& data_errfile,
& tbarfile, sbarfile,sstbarfile,
& psbarfile, bpbarfile,iestaubarfile,
& ubarfile, vbarfile, wbarfile,
& tauxbarfile, tauybarfile,
& hfluxmeanbarfile, sfluxmeanbarfile,
& costTranspDataFile, mdtdatfile,
& mdtstartdate1, mdtstartdate2,
& mdtenddate1, mdtenddate2,
& using_cost_altim,
& using_cost_bp, using_cost_scat,
& using_cost_sst, using_cost_seaice,
& using_cost_transp,
& using_mdt, using_tpj, using_ers, using_gfo,
& using_topex,
& topexstartdate1, topexstartdate2,
& topexperiod, topexfile, tpTimeMaskFile,
& topexintercept, topexslope, ersTimeMaskFile,
& ersstartdate1, ersstartdate2, gfoTimeMaskFile,
& ersperiod, ersfile,
& ersintercept, ersslope,
& gfostartdate1, gfostartdate2,
& gfoperiod, gfofile,
& gfointercept, gfoslope,
& scatstartdate1, scatstartdate2,
& scatperiod, scatxdatfile, scatydatfile,
& scatx_errfile, scaty_errfile,
& ssh_errfile, sshv4cost_scalefile,
& sshv4cost_errfile, sshv4cost_errfactor,
& tp_errfile, ers_errfile, gfo_errfile,
& tmistartdate1, tmistartdate2, tmidatfile,
& sststartdate1, sststartdate2, sstdatfile,
& sssstartdate1, sssstartdate2, sssdatfile,
& bpstartdate1, bpstartdate2, bpdatfile,
& iesstartdate1, iesstartdate2, iesdatfile,
& tdatfile, sdatfile, ctdtfile, ctdsfile,
& ctdtclimfile, ctdsclimfile, xbtfile,
& argotstartdate1, argotstartdate2, argotfile,
& argosstartdate1, argosstartdate2, argosfile,
& udriftfile, vdriftfile,
& udrifterrfile, vdrifterrfile,
& curmtrufile,curmtrvfile,
& salterrfile, temperrfile, velerrfile,
& salt0errfile, temp0errfile, vel0errfile,
& etan0errfile, uvel0errfile, vvel0errfile,
& ssterrfile, ssserrfile, bperrfile,ieserrfile,
& hflux_errfile, sflux_errfile,
& tauu_errfile, tauv_errfile,
& atemp_errfile, aqh_errfile,
& precip_errfile, swflux_errfile, swdown_errfile,
& lwflux_errfile, lwdown_errfile, evap_errfile,
& snowprecip_errfile, apressure_errfile,
& uwind_errfile, vwind_errfile,
& geoid_errfile, geoid_covariancefile,
& bottomdrag_errfile,edtau_errfile,
& kapgm_errfile,kapredi_errfile,diffkr_errfile,
& usercost_datafile, usercost_errfile,
& mult_hflux, mult_sflux, mult_tauu, mult_tauv,
& mult_hfluxmm, mult_sfluxmm,
& mult_atemp, mult_aqh,
& mult_precip, mult_swflux, mult_swdown,
& mult_lwflux, mult_lwdown, mult_evap,
& mult_snowprecip, mult_apressure,
& mult_uwind, mult_vwind,
& mult_hmean, mult_h, mult_sshv4cost,
& mult_tp, mult_ers, mult_gfo,
& mult_temp, mult_salt,
& mult_tmi, mult_sst, mult_sss, mult_bp,
& mult_ctdt, mult_ctds, mult_ies,
& mult_ctdtclim, mult_ctdsclim,
& mult_xbt, mult_drift,
& mult_argot, mult_argos,
& mult_scatx, mult_scaty,
& mult_sdrift, mult_tdrift, mult_wdrift,
& mult_temp0, mult_salt0,
& mult_etan0, mult_uvel0, mult_vvel0,
#if (defined (ALLOW_CTRL) defined (ALLOW_OBCS))
& mult_obcsn, mult_obcss,
& mult_obcsw, mult_obcse, mult_obcsvol,
& mult_ageos,
#endif
& mult_curmtr,
& mult_kapgm, mult_kapredi, mult_diffkr,
& mult_edtau, mult_bottomdrag,
& mult_usercost, mult_transp,
& mult_smooth_ic, mult_smooth_bc,
& whflux0, wsflux0, wtau0,
& wbottomdrag0,
& watemp0, waqh0,
& wprecip0, wswflux0, wswdown0, wwind0,
& wsnowprecip0, wlwflux0, wlwdown0, wevap0,
& wapressure0, wdiffkr0, wkapgm0, wedtau0,
& wkapredi0, wmean_hflux, wmean_sflux, wmean_tau,
& wmean_atemp, wmean_aqh, wmean_precip,
& wmean_swflux, wmean_swdown, wmean_wind,
& wmean_lwflux, wmean_lwdown, wmean_evap,
& wmean_snowprecip, wmean_apressure,
& cost_iprec, cost_yftype
& ,topexmeanfile
#ifdef ALLOW_GENCOST_CONTRIBUTION
namelist //ecco_gencost_nml
& using_gencost,
& gencost_barfile,
& gencost_datafile,
& gencost_name,
& gencost_scalefile,
& gencost_errfile,
& gencost_itracer,
& gencost_preproc,
& gencost_preproc_c,
& gencost_preproc_i,
& gencost_preproc_r,
& gencost_posproc,
& gencost_posproc_c,
& gencost_posproc_i,
& gencost_posproc_r,
& gencost_outputlevel,
& gencost_mask,
& gencost_spmin,
& gencost_spmax,
& gencost_spzero,
& gencost_wei1d,
& gencost_avgperiod,
& gencost_nrecperiod,
& gencost_startdate1,
& gencost_startdate2,
& gencost_enddate1,
& gencost_enddate2,
& gencost_smooth2Ddiffnbt,
& gencost_is1d,
& gencost_is3d,
& gencost_msk_is3d,
& gencost_timevaryweight,
& mult_gencost
#endif /* ALLOW_GENCOST_CONTRIBUTION */
IF ( .NOT.useECCO ) THEN
C- pkg ECCO is not used
_BEGIN_MASTER(myThid)
C- Track pkg activation status:
C print a (weak) warning if data.ecco is found
CALL PACKAGES_UNUSED_MSG( 'useECCO', ' ', ' ' )
_END_MASTER(myThid)
RETURN
ENDIF
_BEGIN_MASTER( myThid )
c-- Set default values.
c run time switches for main cost terms
#if (defined (ALLOW_SSH_COST_CONTRIBUTION)
!defined (ALLOW_GENCOST_CONTRIBUTION) )
using_cost_altim=.TRUE.
#else
using_cost_altim=.FALSE.
#endif
#ifdef ALLOW_SEAICE_COST_CONTRIBUTION
using_cost_seaice=.TRUE.
#else
using_cost_seaice=.FALSE.
#endif
c- set default to false
using_cost_transp=.FALSE.
#ifdef ALLOW_BP_COST_CONTRIBUTION
using_cost_bp=.TRUE.
#else
using_cost_bp=.FALSE.
#endif
#ifdef ALLOW_SST_COST_CONTRIBUTION
using_cost_sst=.TRUE.
#else
using_cost_sst=.FALSE.
#endif
#if (defined (ALLOW_SCAT_COST_CONTRIBUTION)
defined (ALLOW_DAILYSCAT_COST_CONTRIBUTION) )
using_cost_scat=.TRUE.
#else
using_cost_scat=.FALSE.
#endif
c other run time parameters
data_errfile = ' '
tbarfile = 'tbar'
sbarfile = 'sbar'
sstbarfile = 'sstbar'
psbarfile = 'psbar'
bpbarfile = 'bpbar'
iestaubarfile = 'iestaubar'
ubarfile = 'ubar'
vbarfile = 'vbar'
wbarfile = 'wbar'
tauxbarfile = 'tauxbar'
tauybarfile = 'tauybar'
hfluxmeanbarfile = 'hfluxmeanbar'
sfluxmeanbarfile = 'sfluxmeanbar'
costTranspDataFile = ' '
using_tpj = .false.
topexstartdate1 = 0
topexstartdate2 = 0
topexperiod = 0. _d 0
topexintercept = 0. _d 0
topexslope = 0. _d 0
topexfile = ' '
catn: defaulting mdt[start,end]date1 to pavlis so that
catn eccov4 will run without needing to read in these params
using_mdt =.FALSE.
mdtdatfile = ' '
mdtstartdate1 = 19930101
mdtstartdate2 = 0
mdtenddate1 = 20041231
mdtenddate2 = 0
using_ers = .false.
ersstartdate1 = 0
ersstartdate2 = 0
ersperiod = 0. _d 0
ersintercept = 0. _d 0
ersslope = 0. _d 0
ersfile = ' '
using_gfo = .false.
gfostartdate1 = 0
gfostartdate2 = 0
gfoperiod = 0. _d 0
gfointercept = 0. _d 0
gfoslope = 0. _d 0
gfofile = ' '
scatstartdate1 = 0
scatstartdate2 = 0
scatperiod = 0. _d 0
scatxdatfile = ' '
scatydatfile = ' '
ssh_errfile = ' '
tp_errfile = ' '
ers_errfile = ' '
gfo_errfile = ' '
scatx_errfile = ' '
scaty_errfile = ' '
tmistartdate1 = 0
tmistartdate2 = 0
tmidatfile = ' '
sststartdate1 = 0
sststartdate2 = 0
sstdatfile = ' '
sssstartdate1 = 0
sssstartdate2 = 0
sssdatfile = ' '
bpstartdate1 = 0
bpstartdate2 = 0
bpdatfile = ' '
iesstartdate1 = 0
iesstartdate2 = 0
iesdatfile = ' '
tdatfile = ' '
sdatfile = ' '
ctdtfile = ' '
ctdsfile = ' '
ctdtclimfile = ' '
ctdsclimfile = ' '
curmtrufile = ' '
curmtrvfile = ' '
xbtfile = ' '
argotstartdate1 = 0
argotstartdate2 = 0
argotfile = ' '
argosstartdate1 = 0
argosstartdate2 = 0
argosfile = ' '
udriftfile = ' '
vdriftfile = ' '
udrifterrfile = ' '
vdrifterrfile = ' '
salterrfile = ' '
temperrfile = ' '
velerrfile = ' '
salt0errfile = ' '
temp0errfile = ' '
etan0errfile = ' '
uvel0errfile = ' '
vvel0errfile = ' '
vel0errfile = ' '
ssterrfile = ' '
ssserrfile = ' '
bperrfile = ' '
ieserrfile = ' '
hflux_errfile = ' '
sflux_errfile = ' '
tauu_errfile = ' '
tauv_errfile = ' '
atemp_errfile = ' '
aqh_errfile = ' '
precip_errfile = ' '
swflux_errfile = ' '
swdown_errfile = ' '
lwflux_errfile = ' '
lwdown_errfile = ' '
evap_errfile = ' '
snowprecip_errfile = ' '
apressure_errfile = ' '
uwind_errfile = ' '
vwind_errfile = ' '
geoid_errfile = ' '
geoid_covariancefile = ' '
bottomdrag_errfile = ' '
edtau_errfile = ' '
kapgm_errfile = ' '
kapredi_errfile = ' '
diffkr_errfile = ' '
do k=1,NUSERCOST
usercost_datafile(k) = ' '
usercost_errfile(k) = ' '
enddo
do k=1,NSSHV4COST
sshv4cost_scalefile(k) = ' '
sshv4cost_errfile(k) = ' '
sshv4cost_errfactor(k) = 1. _d 0
enddo
tpTimeMaskFile = ' '
ersTimeMaskFile = ' '
gfoTimeMaskFile = ' '
mult_hflux = 0. _d 0
mult_sflux = 0. _d 0
mult_hfluxmm = 0. _d 0
mult_sfluxmm = 0. _d 0
mult_tauu = 0. _d 0
mult_tauv = 0. _d 0
mult_atemp = 0. _d 0
mult_aqh = 0. _d 0
mult_precip = 0. _d 0
mult_swflux = 0. _d 0
mult_swdown = 0. _d 0
mult_lwflux = 0. _d 0
mult_lwdown = 0. _d 0
mult_evap = 0. _d 0
mult_snowprecip = 0. _d 0
mult_apressure = 0. _d 0
mult_uwind = 0. _d 0
mult_vwind = 0. _d 0
mult_hmean = 0. _d 0
mult_h = 1. _d 0
mult_tp = 0. _d 0
mult_ers = 0. _d 0
mult_gfo = 0. _d 0
mult_temp = 0. _d 0
mult_salt = 0. _d 0
mult_temp0 = 0. _d 0
mult_salt0 = 0. _d 0
mult_etan0 = 0. _d 0
mult_uvel0 = 0. _d 0
mult_vvel0 = 0. _d 0
mult_tmi = 0. _d 0
mult_sst = 0. _d 0
mult_sss = 0. _d 0
mult_bp = 0. _d 0
mult_ies = 0. _d 0
mult_ctdt = 0. _d 0
mult_ctds = 0. _d 0
mult_ctdtclim = 0. _d 0
mult_ctdsclim = 0. _d 0
mult_xbt = 0. _d 0
mult_argot = 0. _d 0
mult_argos = 0. _d 0
mult_drift = 0. _d 0
mult_tdrift = 0. _d 0
mult_sdrift = 0. _d 0
mult_wdrift = 0. _d 0
mult_scatx = 0. _d 0
mult_scaty = 0. _d 0
#if (defined (ALLOW_CTRL) defined (ALLOW_OBCS))
mult_obcsn = 0. _d 0
mult_obcss = 0. _d 0
mult_obcsw = 0. _d 0
mult_obcse = 0. _d 0
mult_obcsvol = 0. _d 0
mult_ageos = 0. _d 0
#endif
mult_curmtr = 0. _d 0
mult_kapgm = 0. _d 0
mult_kapredi = 0. _d 0
mult_diffkr = 0. _d 0
mult_edtau = 0. _d 0
mult_bottomdrag = 0. _d 0
do k=1,NUSERCOST
mult_usercost(k) = 0. _d 0
enddo
do k=1,NSSHV4COST
mult_sshv4cost(k) = 0. _d 0
enddo
mult_smooth_ic = 0. _d 0
mult_smooth_bc = 0. _d 0
mult_transp = 0. _d 0
watemp0 = 0. _d 0
waqh0 = 0. _d 0
wprecip0 = 0. _d 0
wswflux0 = 0. _d 0
wswdown0 = 0. _d 0
wlwflux0 = 0. _d 0
wlwdown0 = 0. _d 0
wevap0 = 0. _d 0
wsnowprecip0 = 0. _d 0
wapressure0 = 0. _d 0
wwind0 = 0. _d 0
wdiffkr0 = 1. _d 0
wkapgm0 = 1. _d 0
wkapredi0 = 1. _d 0
wedtau0 = 1. _d 0
whflux0 = 0. _d 0
wsflux0 = 0. _d 0
wtau0 = 0. _d 0
wbottomdrag0 = 1. _d 0
wmean_atemp = 0. _d 0
wmean_aqh = 0. _d 0
wmean_precip = 0. _d 0
wmean_swflux = 0. _d 0
wmean_swdown = 0. _d 0
wmean_lwflux = 0. _d 0
wmean_lwdown = 0. _d 0
wmean_evap = 0. _d 0
wmean_snowprecip = 0. _d 0
wmean_apressure = 0. _d 0
wmean_wind = 0. _d 0
wmean_hflux = 0. _d 0
wmean_sflux = 0. _d 0
wmean_tau = 0. _d 0
cost_iprec = precFloat32
cost_yftype = 'RL'
Catn-- retired parameters
topexmeanfile = ' '
nRetired = 0
c-- Next, read the data.ecco file.
WRITE(msgBuf,'(A)') 'ECCO_READPARMS: opening data.ecco'
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
& SQUEEZE_RIGHT , 1)
CALL OPEN_COPY_DATA_FILE(
I 'data.ecco', 'ECCO_READPARMS',
O iUnit,
I myThid )
READ( iUnit, nml = ecco_cost_nml )
WRITE(msgBuf,'(A)')
& 'ECCO_READPARMS: finished reading #1: ecco_cost_nml'
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
& SQUEEZE_RIGHT , 1)
C-- Check parameters:
IF ( cost_yftype.NE.'RL' ) THEN
STOP 'ABNORMAL END: S/R ECCO_READPARMS: invalid cost_yftype'
ENDIF
Catn -- retired parameters
IF ( topexmeanfile .NE. ' ' ) THEN
nRetired = nRetired + 1
WRITE(msgBuf,'(A,A)')
& 'S/R ECCO_READPARMS: "topexmeanfile" ',
& 'is no longer allowed in file "data.ecco"'
CALL PRINT_ERROR( msgBuf, myThid )
WRITE(msgBuf,'(A)')
& 'S/R ECCO_READPARMS: set "mdtdatfile" instead'
CALL PRINT_ERROR( msgBuf, myThid )
STOP 'ABNORMAL END: S/R ECCO_READPARMS'
ENDIF
IF ( nRetired .GT. 0 ) THEN
WRITE(msgBuf,'(2A)') 'S/R ECCO_READPARMS: ',
& 'Error reading parameter file "data.ecco"'
CALL PRINT_ERROR( msgBuf, myThid )
WRITE(msgBuf,'(A)')
& 'some out of date parameters were found in the namelist'
CALL PRINT_ERROR( msgBuf, myThid )
STOP 'ABNORMAL END: S/R ECCO_READPARMS'
ENDIF
_END_MASTER( myThid )
c empty pre/post-processing :
c =========================
_BEGIN_MASTER( myThid )
do k2=1,NGENPPROC
no_preproc(k2) = ' '
no_preproc_c(k2) = ' '
no_preproc_i(k2) = 0
no_preproc_r(k2) = 0. _d 0
no_posproc(k2) = ' '
no_posproc_c(k2) = ' '
no_posproc_i(k2) = 0
no_posproc_r(k2) = 0. _d 0
clim_preproc(k2) = ' '
clim_preproc_i(k2) = 0
anom_preproc(k2) = ' '
enddo
clim_preproc(1) = 'clim'
clim_preproc_i(1) = 12
anom_preproc(1) = 'anom'
_END_MASTER( myThid )
#ifdef ALLOW_GENCOST_CONTRIBUTION
_BEGIN_MASTER( myThid )
c-- Set default values.
do k=1,NGENCOST
using_gencost(k) = .FALSE.
gencost_flag(k) = 0
gencost_avgperiod(k) = ' '
gencost_startdate1(k) = 0
gencost_startdate2(k) = 0
gencost_enddate1(k) = 0
gencost_enddate2(k) = 0
gencost_datafile(k) = ' '
gencost_name(k) = 'gencost'
do k2=1,NGENPPROC
gencost_preproc(k2,k) = ' '
gencost_preproc_c(k2,k) = ' '
gencost_preproc_i(k2,k) = 0
gencost_preproc_r(k2,k) = 0. _d 0
gencost_posproc(k2,k) = ' '
gencost_posproc_c(k2,k) = ' '
gencost_posproc_i(k2,k) = 0
gencost_posproc_r(k2,k) = 0. _d 0
enddo
gencost_outputlevel(k)= 0
gencost_errfile(k) = ' '
gencost_itracer(k) = 1
gencost_mask(k) = ' '
gencost_barfile(k) = ' '
gencost_spmin(k) = 0. _d 0
gencost_spmax(k) = 0. _d 0
gencost_spzero(k) = 9876. _d 0
gencost_wei1d(k) = 0. _d 0
mult_gencost(k) = 1. _d 0
gencost_is1d(k) = .FALSE.
gencost_is3d(k) = .FALSE.
gencost_pointer3d(k) = 0
gencost_msk_is3d = .FALSE.
gencost_msk_pointer3d(k) = 0
c boxmean/horflux masks
call ECCO_ZERO(gencost_mskCsurf(1-olx,1-oly,1,1,k),
& 1,zeroRL,mythid)
call ECCO_ZERO(gencost_mskWsurf(1-olx,1-oly,1,1,k),
& 1,zeroRL,mythid)
call ECCO_ZERO(gencost_mskSsurf(1-olx,1-oly,1,1,k),
& 1,zeroRL,mythid)
do k2 = 1,nr
gencost_mskVertical(k2,k)= 1. _d 0
enddo
c deprecated:
gencost_nrecperiod(k) = 0
gencost_scalefile(k) = ' '
gencost_smooth2Ddiffnbt(k) = 0
gencost_timevaryweight(k) = .FALSE.
enddo
#ifdef ALLOW_GENCOST3D
do k=1,NGENCOST3D
c boxmean/horflux masks
call ECCO_ZERO(gencost_mskC(1-olx,1-oly,1,1,1,k),
& Nr,zeroRL,mythid)
call ECCO_ZERO(gencost_mskW(1-olx,1-oly,1,1,1,k),
& Nr,zeroRL,mythid)
call ECCO_ZERO(gencost_mskS(1-olx,1-oly,1,1,1,k),
& Nr,zeroRL,mythid)
enddo
#endif
READ( iUnit, nml = ecco_gencost_nml )
WRITE(msgBuf,'(A)')
& 'ECCO_READPARMS: finished reading #2: ecco_gencost_nml'
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
& SQUEEZE_RIGHT , 1)
gencost_k3d=1
gencost_msk_k3d=1
do k=1,NGENCOST
c pre-specified generic cost terms using otherwise created barfiles
if ( (gencost_name(k).EQ.'sshv4-mdt').OR.
& (gencost_name(k).EQ.'sshv4-tp').OR.
& (gencost_name(k).EQ.'sshv4-ers').OR.
& (gencost_name(k).EQ.'sshv4-gfo').OR.
& (gencost_name(k).EQ.'sshv4-lsc').OR.
& (gencost_name(k).EQ.'sshv4-gmsl').OR.
& (gencost_name(k).EQ.'bpv4-grace').OR.
& (gencost_name(k).EQ.'sstv4-amsre').OR.
& (gencost_name(k).EQ.'sstv4-amsre-lsc') ) then
gencost_flag(k)=-1
using_gencost(k)=.TRUE.
catn move boxmean outside -1 to have its own check
catn preserve -2 for potential separate group above into cost
catn with and without requirements of datafile or errfile
elseif ( (gencost_barfile(k)(1:9).EQ.'m_boxmean').OR.
& (gencost_barfile(k)(1:9).EQ.'m_horflux') ) then
gencost_flag(k)=-3
using_gencost(k)=.TRUE.
il=ilnblnk(gencost_name(k))
WRITE(msgBuf,'(A,I3,3A,L5)') 'gencost k_boxmean/horflux=',
& k,' ',gencost_name(k)(1:il),': ',using_gencost(k)
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
& SQUEEZE_RIGHT , 1)
if ( gencost_msk_is3d(k) ) then
gencost_msk_pointer3d(k)=gencost_msk_k3d
gencost_msk_k3d=gencost_msk_k3d+1
endif
catn add cost global transport using gencost framework
elseif ( gencost_name(k)(1:6).EQ.'transp' ) then
gencost_flag(k)=-4
using_gencost(k)=.TRUE.
il=ilnblnk(gencost_name(k))
WRITE(msgBuf,'(A,i3,3A,L5)') 'gencost k_transp=',
& k,' ',gencost_name(k)(1:il),': ',using_gencost(k)
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
& SQUEEZE_RIGHT , 1)
c pre-specified generic cost terms that create their own barfile
elseif (
& (gencost_name(k).EQ.'siv4-conc').OR.
& (gencost_name(k).EQ.'siv4-deconc').OR.
& (gencost_name(k).EQ.'siv4-exconc') ) then
gencost_flag(k)=2
using_gencost(k)=.TRUE.
c fully interactive generic cost terms
elseif ( gencost_datafile(k) .NE. ' ' ) then
gencost_flag(k)=1
using_gencost(k)=.TRUE.
endif
c identified three dimensional variables
if ( (gencost_barfile(k)(1:7).EQ.'m_theta').OR.
& (gencost_barfile(k)(1:6).EQ.'m_salt').OR.
& (gencost_barfile(k)(1:8).EQ.'m_diffkr').OR.
& (gencost_barfile(k)(1:7).EQ.'m_kapgm').OR.
& (gencost_barfile(k)(1:9).EQ.'m_kapredi').OR.
& (gencost_barfile(k)(1:7).EQ.'m_trVol').OR.
& (gencost_barfile(k)(1:9).EQ.'m_trHeat').OR.
& (gencost_barfile(k)(1:9).EQ.'m_trSalt')
& )
& gencost_is3d(k)=.TRUE.
c assign a 3D storage array, then increment 3D variables counter
if ( gencost_is3d(k) ) then
gencost_pointer3d(k)=gencost_k3d
gencost_k3d=gencost_k3d+1
endif
enddo
C-- load masks if needed:
do k=1,NGENCOST
kk=gencost_msk_pointer3d(k)
if ( ( gencost_mask(k) .NE. ' ' ).AND.
& (gencost_flag(k).EQ.-3) ) then
c
il = ilnblnk(gencost_mask(k))
write(tempfile(1:128),'(2A)') gencost_mask(k)(1:il),'C'
inquire( file=tempfile(1:il+1), exist=exst )
if (exst.AND.(.NOT.gencost_msk_is3d(k))) then
call MDSREADFIELD(tempfile,cost_iprec,'RL',1,
& gencost_mskCsurf(1-olx,1-oly,1,1,k),1,mythid)
#ifdef ALLOW_GENCOST3D
elseif (exst.AND.(gencost_msk_pointer3d(k).LE.
& NGENCOST3D)) then
call MDSREADFIELD(tempfile,cost_iprec,'RL',Nr,
& gencost_mskC(1-olx,1-oly,1,1,1,kk),1,mythid)
#endif
endif
c
il = ilnblnk(gencost_mask(k))
write(tempfile(1:128),'(2A)') gencost_mask(k)(1:il),'W'
inquire( file=tempfile(1:il+1), exist=exst )
if (exst.AND.(.NOT.gencost_msk_is3d(k))) then
call MDSREADFIELD(tempfile,cost_iprec,'RL',1,
& gencost_mskWsurf(1-olx,1-oly,1,1,k),1,mythid)
#ifdef ALLOW_GENCOST3D
elseif (exst.AND.(gencost_msk_pointer3d(k).LE.
& NGENCOST3D)) then
call MDSREADFIELD(tempfile,cost_iprec,'RL',Nr,
& gencost_mskW(1-olx,1-oly,1,1,1,kk),1,mythid)
#endif
endif
c
il = ilnblnk(gencost_mask(k))
write(tempfile(1:128),'(2A)') gencost_mask(k)(1:il),'S'
inquire( file=tempfile(1:il+1), exist=exst )
if (exst.AND.(.NOT.gencost_msk_is3d(k))) then
call MDSREADFIELD(tempfile,cost_iprec,'RL',1,
& gencost_mskSsurf(1-olx,1-oly,1,1,k),1,mythid)
#ifdef ALLOW_GENCOST3D
elseif (exst.AND.(gencost_msk_pointer3d(k).LE.
& NGENCOST3D)) then
call MDSREADFIELD(tempfile,cost_iprec,'RL',Nr,
& gencost_mskS(1-olx,1-oly,1,1,1,kk),1,mythid)
#endif
endif
c
il = ilnblnk(gencost_mask(k))
write(tempfile(1:128),'(2A)') gencost_mask(k)(1:il),'K'
inquire( file=tempfile(1:il+1), exist=exst )
if (exst) then
ioUnit = 0
call MDS_READVEC_LOC(tempfile,cost_iprec,ioUnit,'RL',
& nR, gencost_mskVertical(1,k), dummyRS, 0, 0, 1, myThid )
endif
c
endif!errfile
enddo
C-- Check parameters:
do k=1,NGENCOST
cgf ensure backward compatibility:
if (gencost_barfile(k).NE.' ') then
if (gencost_barfile(k)(1:2).NE.'m_') then
il=ilnblnk(gencost_barfile(k))
WRITE(msgBuf,'(A,A)') 'm_',gencost_barfile(k)(1:il)
gencost_barfile(k)=msgBuf(1:il+2)
endif
if (gencost_barfile(k)(1:8).EQ.'m_tauZon') then
il=ilnblnk(gencost_barfile(k))
WRITE(msgBuf,'(A,A)') 'm_ustress',gencost_barfile(k)(9:il)
gencost_barfile(k)=msgBuf(1:il+1)
endif
if (gencost_barfile(k)(1:8).EQ.'m_tauMer') then
il=ilnblnk(gencost_barfile(k))
WRITE(msgBuf,'(A,A)') 'm_vstress',gencost_barfile(k)(9:il)
gencost_barfile(k)=msgBuf(1:il+1)
endif
endif
catn separate out blocks of gencost_flag so that each block is checked
if ( using_gencost(k)) then
if ( gencost_flag(k).GE.1 ) then
if ( gencost_name(k) .EQ. 'gencost' )
& gencost_name(k) = gencost_datafile(k)
if ( gencost_avgperiod(k) .NE. 'day ' .AND.
& gencost_avgperiod(k) .NE. 'DAY ' .AND.
& gencost_avgperiod(k) .NE. 'month' .AND.
& gencost_avgperiod(k) .NE. 'MONTH' .AND.
& gencost_avgperiod(k) .NE. 'step' .AND.
& gencost_avgperiod(k) .NE. 'STEP' .AND.
& gencost_avgperiod(k) .NE. 'const' .AND.
& gencost_avgperiod(k) .NE. 'CONST' .AND.
& gencost_avgperiod(k) .NE. 'year ' .AND.
& gencost_avgperiod(k) .NE. 'YEAR ' ) then
il=ilnblnk(gencost_name(k))
WRITE(msgBuf,'(A,I2,2A)')
& 'ERROR in ECCO_READPARMS: for gencost',k,
& ' ',gencost_name(k)(1:il)
CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
& SQUEEZE_RIGHT , 1)
STOP
& 'ECCO_READPARMS: gencost_avgperiod not properly set'
end
if
if ( gencost_spmin(k) .EQ. 0. _d 0 .AND.
& gencost_spmax(k) .EQ. 0. _d 0 ) then
il=ilnblnk(gencost_name(k))
WRITE(msgBuf,'(A,I2,2A)')
& 'ERROR in ECCO_READPARMS: for gencost',k,
& ' ',gencost_name(k)(1:il)
CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
& SQUEEZE_RIGHT , 1)
STOP
& 'ECCO_READPARMS: gencost_spmin, gencost_spmax not set'
endif
if ( gencost_spzero(k) .EQ. 9876. _d 0 ) then
il=ilnblnk(gencost_name(k))
WRITE(msgBuf,'(A,I2,2A)')
& 'ERROR in ECCO_READPARMS: for gencost',k,
& ' ',gencost_name(k)(1:il)
CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
& SQUEEZE_RIGHT , 1)
STOP
& 'ECCO_READPARMS: gencost_spzero not set'
endif
catn -- checking for -1 flag
elseif( gencost_flag(k) .eq. -1 ) then
catn -- checking boxmean and transp
elseif( gencost_flag(k).lt.-1) then
if ( gencost_avgperiod(k) .NE. 'day ' .AND.
& gencost_avgperiod(k) .NE. 'DAY ' .AND.
& gencost_avgperiod(k) .NE. 'month' .AND.
& gencost_avgperiod(k) .NE. 'MONTH' .AND.
& gencost_avgperiod(k) .NE. 'step' .AND.
& gencost_avgperiod(k) .NE. 'STEP' .AND.
& gencost_avgperiod(k) .NE. 'const' .AND.
& gencost_avgperiod(k) .NE. 'CONST' .AND.
& gencost_avgperiod(k) .NE. 'year ' .AND.
& gencost_avgperiod(k) .NE. 'YEAR ' ) then
il=ilnblnk(gencost_name(k))
WRITE(msgBuf,'(A,I2,2A)')
& 'ERROR in ECCO_READPARMS: for gencost',k,
& ' ',gencost_name(k)(1:il)
CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
& SQUEEZE_RIGHT , 1)
STOP
& 'ECCO_READPARMS: gencost_avgperiod not properly set'
endif
endif !gencost_flag
endif !using_gencost
end
do
_END_MASTER( myThid )
#endif /* ALLOW_GENCOST_CONTRIBUTION */
_BEGIN_MASTER( myThid )
#ifdef SINGLE_DISK_IO
CLOSE(iUnit)
#else
CLOSE(iUnit,STATUS='DELETE')
#endif /* SINGLE_DISK_IO */
_END_MASTER( myThid )
WRITE(msgBuf,'(A)')
& 'ECCO_READPARMS: done'
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
& SQUEEZE_RIGHT , 1)
_BARRIER
end