! Author: Biju Thomas(GSO/URI) on 2016/05/14 MODULE setvars IMPLICIT NONE INTEGER, PARAMETER :: im_global=1702, jm_global=482, kb=23 INTEGER, PARAMETER :: flagged=-999 INTEGER :: im_local, jm_local, n_proc INTEGER :: im, imm1, imm2, jm, jmm1, jmm2, kbm1, kbm2 INTEGER :: my_task, master_task, pom_comm INTEGER :: n_west, n_east, n_south, n_north INTEGER :: iint, iprint, iprint2, mode, ntp, iend, iext INTEGER :: ifplane, igeovel, ionedim, ipwave, ismoth INTEGER :: ispadv, isplit, iswtch, nadv, nbct, nbcs, nitera INTEGER :: nl, npg, nprinto, nprinto2, nread_rst, irestart INTEGER :: error_status, nstorms LOGICAL :: lramp CHARACTER(LEN=26) :: time_start CHARACTER(LEN=40) :: source, title CHARACTER(LEN=120) :: netcdf_file, read_rst_file, write_rst_file REAL :: alpha, cnorth_e, deg2rad, dte, dti, dti2, grav, hmax REAL :: kappa, pi, ramp, rfe, rfn, rfs, rfw, rhoref, rho_0 REAL :: rearth, sbias, slmax, small, smh, tbias, time, tnowindd REAL :: tprni, umol, vmaxl, write_rst, aam_init, cbcmax, cbcmin REAL :: days, dte2, horcon, ispi, isp2i, period, prtd1, prtd2 REAL :: smoth, sw, swtch, time0, z0b REAL :: dz(kb), dzz(kb), z(kb), zz(kb) INTEGER, ALLOCATABLE :: i_global(:), j_global(:), irflg(:,:) REAL, ALLOCATABLE :: aam2d(:,:), advua(:,:), advva(:,:), adx2d(:,:), & ady2d(:,:), art(:,:), aru(:,:), arv(:,:), cbc(:,:), cor(:,:), d(:,:), & drx2d(:,:), dry2d(:,:), dt(:,:), dum(:,:), dvm(:,:), dx(:,:), & dy(:,:), east_c(:,:), east_e(:,:), east_u(:,:), east_v(:,:), & e_atmos(:,:), egb(:,:), egf(:,:), el(:,:), elb(:,:), elf(:,:), & et(:,:), etb(:,:), etf(:,:), fluxua(:,:), fluxva(:,:), fsm(:,:), & h(:,:), mdp(:,:), north_c(:,:), north_e(:,:), north_u(:,:), & north_v(:,:), psi(:,:), rot(:,:), ssurf(:,:), swrad(:,:), swradb(:,:), & swradf(:,:), taux(:,:), tauxi(:,:), tauy(:,:), tauyi(:,:), tps(:,:), & tsurf(:,:), ua(:,:), uab(:,:), uaf(:,:), utb(:,:), utf(:,:), va(:,:), & vab(:,:), vaf(:,:), vfluxb(:,:), vfluxf(:,:), vtb(:,:), vtf(:,:), & whs(:,:), windx(:,:), windy(:,:), wssurf(:,:), wssurfb(:,:), wssurff(:,:), & wtsurf(:,:), wtsurfb(:,:), wtsurff(:,:), wubot(:,:), wusurf(:,:), & wusurfb(:,:), wusurff(:,:), wvbot(:,:), wvsurf(:,:), wvsurfb(:,:), & wvsurff(:,:) REAL, ALLOCATABLE :: h_u(:,:), h_v(:,:), mdpth_u(:,:), mdpth_v(:,:), & ud2d(:,:), vd2d(:,:), wbcond(:,:) REAL, ALLOCATABLE :: aam(:,:,:), advx(:,:,:), advy(:,:,:), drhox(:,:,:), & drhoy(:,:,:), dtef(:,:,:), kh(:,:,:), km(:,:,:), kq(:,:,:), & l(:,:,:), q2b(:,:,:), q2(:,:,:), q2lb(:,:,:), q2l(:,:,:), & rho(:,:,:), rmean(:,:,:), sb(:,:,:), sbin(:,:,:), sclim(:,:,:), & s(:,:,:), srstr(:,:,:), srstrf(:,:,:), srstrb(:,:,:), tb(:,:,:), & tbin(:,:,:), tclim(:,:,:), t(:,:,:), trstr(:,:,:), trstrf(:,:,:), & trstrb(:,:,:), taurstr(:,:,:), taurstrf(:,:,:), taurstrb(:,:,:), & ub(:,:,:), uf(:,:,:), u(:,:,:), vb(:,:,:), vf(:,:,:), v(:,:,:), & w(:,:,:), wr(:,:,:), zflux(:,:,:) REAL, ALLOCATABLE :: ele(:), eln(:), els(:), elw(:), sbe(:,:), & sbeb(:,:), sbef(:,:), sbn(:,:), sbnb(:,:), sbnf(:,:), & sbs(:,:), sbsb(:,:), sbsf(:,:), sbw(:,:), sbwb(:,:), sbwf(:,:), & tbe(:,:), tbeb(:,:), tbef(:,:), tbn(:,:), tbnb(:,:), tbnf(:,:), & tbs(:,:), tbsb(:,:), tbsf(:,:), tbw(:,:), tbwb(:,:), tbwf(:,:), & uabe(:), uabeb(:), uabef(:), uabw(:), uabwb(:), uabwf(:), ube(:,:), & ubw(:,:), vabn(:), vabnb(:), vabnf(:), vabs(:), vabsb(:), vabsf(:), & vbn(:,:), vbs(:,:) CONTAINS SUBROUTINE allocarrs() INTEGER :: iostat ALLOCATE(i_global(im_local), j_global(jm_local), irflg(im_local,jm_local), & STAT = iostat) IF (iostat /= 0) STOP "*** Unable to Allocate(1) ***" ALLOCATE(aam2d(im_local,jm_local), advua(im_local,jm_local), advva(im_local,jm_local), & adx2d(im_local,jm_local), ady2d(im_local,jm_local), art(im_local,jm_local), & aru(im_local,jm_local), arv(im_local,jm_local), cbc(im_local,jm_local), & cor(im_local,jm_local), d(im_local,jm_local), drx2d(im_local,jm_local), & dry2d(im_local,jm_local), dt(im_local,jm_local), dum(im_local,jm_local), & dvm(im_local,jm_local), dx(im_local,jm_local), dy(im_local,jm_local), & east_c(im_local,jm_local), east_e(im_local,jm_local), east_u(im_local,jm_local), & east_v(im_local,jm_local), e_atmos(im_local,jm_local), egb(im_local,jm_local), & egf(im_local,jm_local), el(im_local,jm_local), elb(im_local,jm_local), & elf(im_local,jm_local), et(im_local,jm_local), etb(im_local,jm_local), & etf(im_local,jm_local), fluxua(im_local,jm_local), fluxva(im_local,jm_local), & fsm(im_local,jm_local), h(im_local,jm_local), mdp(im_local,jm_local), & north_c(im_local,jm_local), north_e(im_local,jm_local), north_u(im_local,jm_local), & north_v(im_local,jm_local), psi(im_local,jm_local), rot(im_local,jm_local), & ssurf(im_local,jm_local), swrad(im_local,jm_local), swradb(im_local,jm_local), & swradf(im_local,jm_local), taux(im_local,jm_local), tauxi(im_local,jm_local), & tauy(im_local,jm_local), tauyi(im_local,jm_local), tps(im_local,jm_local), & tsurf(im_local,jm_local), ua(im_local,jm_local), uab(im_local,jm_local), & uaf(im_local,jm_local), utb(im_local,jm_local), utf(im_local,jm_local), & va(im_local,jm_local), vab(im_local,jm_local), vaf(im_local,jm_local), & vfluxb(im_local,jm_local), vfluxf(im_local,jm_local), vtb(im_local,jm_local), & vtf(im_local,jm_local), whs(im_local,jm_local), windx(im_local,jm_local), & windy(im_local,jm_local), wssurf(im_local,jm_local), wssurfb(im_local,jm_local), & wssurff(im_local,jm_local), wtsurf(im_local,jm_local), wtsurfb(im_local,jm_local), & wtsurff(im_local,jm_local), wubot(im_local,jm_local), wusurf(im_local,jm_local), & wusurfb(im_local,jm_local), wusurff(im_local,jm_local), wvbot(im_local,jm_local), & wvsurf(im_local,jm_local), wvsurfb(im_local,jm_local), wvsurff(im_local,jm_local), & h_u(im_local,jm_local), h_v(im_local,jm_local), mdpth_u(im_local,jm_local), & mdpth_v(im_local,jm_local), ud2d(im_local,jm_local), vd2d(im_local,jm_local), & wbcond(im_local,jm_local), STAT = iostat) IF (iostat /= 0) STOP "*** Unable to Allocate(2) ***" ALLOCATE(aam(im_local,jm_local,kb), advx(im_local,jm_local,kb), advy(im_local,jm_local,kb), & drhox(im_local,jm_local,kb), drhoy(im_local,jm_local,kb), dtef(im_local,jm_local,kb), & kh(im_local,jm_local,kb), km(im_local,jm_local,kb), kq(im_local,jm_local,kb), & l(im_local,jm_local,kb), q2b(im_local,jm_local,kb), q2(im_local,jm_local,kb), & q2lb(im_local,jm_local,kb), q2l(im_local,jm_local,kb), rho(im_local,jm_local,kb), & rmean(im_local,jm_local,kb), sb(im_local,jm_local,kb), sbin(im_local,jm_local,kb), & sclim(im_local,jm_local,kb), s(im_local,jm_local,kb), srstr(im_local,jm_local,kb), & srstrf(im_local,jm_local,kb), srstrb(im_local,jm_local,kb), tb(im_local,jm_local,kb), & tbin(im_local,jm_local,kb), tclim(im_local,jm_local,kb), t(im_local,jm_local,kb), & trstr(im_local,jm_local,kb), trstrf(im_local,jm_local,kb), trstrb(im_local,jm_local,kb), & taurstr(im_local,jm_local,kb), taurstrf(im_local,jm_local,kb), taurstrb(im_local,jm_local,kb), & ub(im_local,jm_local,kb), uf(im_local,jm_local,kb), u(im_local,jm_local,kb), & vb(im_local,jm_local,kb), vf(im_local,jm_local,kb), v(im_local,jm_local,kb), & w(im_local,jm_local,kb), wr(im_local,jm_local,kb), zflux(im_local,jm_local,kb) , & STAT = iostat) IF (iostat /= 0) STOP "*** Unable to Allocate(3) ***" ALLOCATE(ele(jm_local), eln(im_local), els(im_local), elw(jm_local), & sbe(jm_local,kb), sbeb(jm_local,kb), sbef(jm_local,kb), & sbn(im_local,kb), sbnb(im_local,kb), sbnf(im_local,kb), & sbs(im_local,kb), sbsb(im_local,kb), sbsf(im_local,kb), & sbw(jm_local,kb), sbwb(jm_local,kb), sbwf(jm_local,kb), & tbe(jm_local,kb), tbeb(jm_local,kb), tbef(jm_local,kb), & tbn(im_local,kb), tbnb(im_local,kb), tbnf(im_local,kb), & tbs(im_local,kb), tbsb(im_local,kb), tbsf(im_local,kb), & tbw(jm_local,kb), tbwb(jm_local,kb), tbwf(jm_local,kb), & uabe(jm_local), uabeb(jm_local), uabef(jm_local), uabw(jm_local), & uabwb(jm_local), uabwf(jm_local), ube(jm_local,kb), & ubw(jm_local,kb), vabn(im_local), vabnb(im_local), vabnf(im_local), & vabs(im_local), vabsb(im_local), vabsf(im_local), vbn(im_local,kb), & vbs(im_local,kb), STAT = iostat) IF (iostat /= 0) STOP "*** Unable to Allocate(4) ***" END SUBROUTINE allocarrs SUBROUTINE deallocarrs() INTEGER :: iostat DEALLOCATE(i_global, j_global, irflg, STAT = iostat) IF (iostat /= 0) STOP "*** Unable to DeAllocate(1) ***" DEALLOCATE(aam2d, advua, advva, adx2d, ady2d, art, aru, arv, cbc, cor, d,& drx2d, dry2d, dt, dum, dvm, dx, dy, east_c, east_e, east_u, east_v, & e_atmos, egb, egf, el, elb, elf, et, etb, etf, fluxua, fluxva, fsm, & h, mdp, north_c, north_e, north_u, north_v, psi, rot, ssurf, swrad, swradb, & swradf, taux, tauxi, tauy, tauyi, tps, tsurf, ua, uab, uaf, utb, utf, va, & vab, vaf, vfluxb, vfluxf, vtb, vtf, whs, windx, windy, wssurf, wssurfb, wssurff, & wtsurf, wtsurfb, wtsurff, wubot, wusurf, wusurfb, wusurff, wvbot, wvsurf, & wvsurfb, wvsurff, STAT = iostat) IF (iostat /= 0) STOP "*** Unable to DeAllocate(2) ***" DEALLOCATE(aam, advx, advy, drhox, drhoy, dtef, kh, km, kq, & l, q2b, q2, q2lb, q2l, rho, rmean, sb, sbin, sclim, & s, srstr, srstrf, srstrb, tb, tbin, tclim, t, trstr, trstrf, & trstrb, taurstr, taurstrf, taurstrb, ub, uf, u, vb, vf, v, & w, wr, zflux, STAT = iostat) IF (iostat /= 0) STOP "*** Unable to DeAllocate(3) ***" DEALLOCATE(ele, eln, els, elw, sbe, sbeb, sbef, sbn, sbnb, sbnf, & sbs, sbsb, sbsf, sbw, sbwb, sbwf, tbe, tbeb, tbef, tbn, tbnb, tbnf, & tbs, tbsb, tbsf, tbw, tbwb, tbwf, uabe, uabeb, uabef, uabw, uabwb, & uabwf, ube, ubw, vabn, vabnb, vabnf, vabs, vabsb, vabsf, vbn, vbs, & STAT = iostat) IF (iostat /= 0) STOP "*** Unable to DeAllocate(4) ***" END SUBROUTINE deallocarrs END MODULE setvars