Tangent-linear Code for Shallow Water Model

We show the tangent linear code as well as the driver code that is used to call the transformed top-level routine correctly.

Tangent-linear Code

C ***********************************************************
C Fortran file translated from WHIRL Thu Sep 16 17:28:12 2004
C ***********************************************************
C ***********************************************************

      MODULE adsize
      use w2f__types
      use active_module
      IMPLICIT NONE
C
C     **** Global Variables ****
C
      type(active) :: ADXC(1 : 6200)
      SAVE ADXC
      INTEGER(w2f__i4) NC
      SAVE NC
      type(active) :: XC(1 : 6200)
      SAVE XC
C
C     **** Local Variables and functions ****
C
      INTEGER(w2f__i4) NCMAX
      PARAMETER ( NCMAX = 6200)
C
C     **** statements ****
C
      END MODULE

      MODULE size
      use w2f__types
      use active_module
      IMPLICIT NONE
C
C     **** Local Variables and functions ****
C
      INTEGER(w2f__i4) NX
      PARAMETER ( NX = 20)
      INTEGER(w2f__i4) NY
      PARAMETER ( NY = 20)
C
C     **** statements ****
C
      END MODULE

      MODULE parms
      use w2f__types
      use active_module
      IMPLICIT NONE
C
C     **** Global Variables ****
C
      type(active) :: AH
      SAVE AH
      type(active) :: BETA
      SAVE BETA
      LOGICAL(w2f__i4) CALC_HESS
      SAVE CALC_HESS
      LOGICAL(w2f__i4) CARTESIAN
      SAVE CARTESIAN
      CHARACTER(80) DEPTHFILE
      SAVE DEPTHFILE
      type(active) :: DT
      SAVE DT
      type(active) :: DT_DUMP
      SAVE DT_DUMP
      CHARACTER(80) ETAINIFILE
      SAVE ETAINIFILE
      type(active) :: F0
      SAVE F0
      CHARACTER(80) FORCINGFILE
      SAVE FORCINGFILE
      CHARACTER(80) FOUTNAME
      SAVE FOUTNAME
      LOGICAL(w2f__i4) FULLIO
      SAVE FULLIO
      LOGICAL(w2f__i4) GRAD_CHECK
      SAVE GRAD_CHECK
      LOGICAL(w2f__i4) INITIAL_GRAD
      SAVE INITIAL_GRAD
      INTEGER(w2f__i4) ITERATION
      SAVE ITERATION
      CHARACTER(80) NCDATAFILE
      SAVE NCDATAFILE
      CHARACTER(80) NCRESTARTFILE
      SAVE NCRESTARTFILE
      INTEGER(w2f__i4) NT
      SAVE NT
      INTEGER(w2f__i4) NTSPINUP
      SAVE NTSPINUP
      type(active) :: OM
      SAVE OM
      LOGICAL(w2f__i4) OPTIMIZE
      SAVE OPTIMIZE
      LOGICAL(w2f__i4) QUADFRIC
      SAVE QUADFRIC
      type(active) :: RINI
      SAVE RINI
      CHARACTER(80) RUNNAME
      SAVE RUNNAME
      LOGICAL(w2f__i4) SPHERICAL
      SAVE SPHERICAL
      type(active) :: START_TIME
      SAVE START_TIME
      LOGICAL(w2f__i4) SUPPRESSIO
      SAVE SUPPRESSIO
      CHARACTER(80) UINIFILE
      SAVE UINIFILE
      CHARACTER(80) VINIFILE
      SAVE VINIFILE
      LOGICAL(w2f__i4) XPERIODIC
      SAVE XPERIODIC
      type(active) :: XSTART
      SAVE XSTART
      LOGICAL(w2f__i4) YPERIODIC
      SAVE YPERIODIC
      type(active) :: YSTART
      SAVE YSTART
C
C     **** Local Variables and functions ****
C
      REAL(w2f__4) DEG2RAD
      PARAMETER ( DEG2RAD =   0.01745329)
      REAL(w2f__4) EARTH
      PARAMETER ( EARTH =     6371000.)
      REAL(w2f__4) G
      PARAMETER ( G =     9.810000)
      REAL(w2f__4) INVRHO0
      PARAMETER ( INVRHO0 = 0.0009727626)
      REAL(w2f__4) PI
      PARAMETER ( PI =     3.141593)
      REAL(w2f__4) RHO0
      PARAMETER ( RHO0 =     1028.000)
C
C     **** statements ****
C
      END MODULE

      MODULE vars
      use w2f__types
      use active_module
      use size
      IMPLICIT NONE
C
C     **** Global Variables ****
C
      type(active) :: ETA(0 : 21, 0 : 21)
      SAVE ETA
      type(active) :: U(0 : 21, 0 : 21)
      SAVE U
      type(active) :: V(0 : 21, 0 : 21)
      SAVE V
C
C     **** statements ****
C
      END MODULE

      MODULE pfields
      use w2f__types
      use active_module
      use size
      IMPLICIT NONE
C
C     **** Global Variables ****
C
      type(active) :: DEPTH(0 : 21, 0 : 21)
      SAVE DEPTH
      type(active) :: DX(0 : 20)
      SAVE DX
      type(active) :: DY(0 : 20)
      SAVE DY
      type(active) :: ETAINI(1 : 20, 1 : 20)
      SAVE ETAINI
      type(active) :: ETAMASK(0 : 21, 0 : 21)
      SAVE ETAMASK
      type(active) :: FCORIU(1 : 20, 1 : 20)
      SAVE FCORIU
      type(active) :: FCORIV(1 : 20, 1 : 20)
      SAVE FCORIV
      type(active) :: FRICT(0 : 21, 0 : 21)
      SAVE FRICT
      type(active) :: HU(0 : 21, 0 : 21)
      SAVE HU
      type(active) :: HV(0 : 21, 0 : 21)
      SAVE HV
      type(active) :: HY(0 : 21)
      SAVE HY
      type(active) :: INIDEPTH(1 : 20, 1 : 20)
      SAVE INIDEPTH
      type(active) :: INVHU(0 : 21, 0 : 21)
      SAVE INVHU
      type(active) :: INVHV(0 : 21, 0 : 21)
      SAVE INVHV
      type(active) :: RX(0 : 21)
      SAVE RX
      type(active) :: RY
      SAVE RY
      type(active) :: SCALEDEPTH(1 : 20, 1 : 20)
      SAVE SCALEDEPTH
      type(active) :: SCALEETA(1 : 20, 1 : 20)
      SAVE SCALEETA
      type(active) :: SCALEU(1 : 20, 1 : 20)
      SAVE SCALEU
      type(active) :: SCALEV(1 : 20, 1 : 20)
      SAVE SCALEV
      type(active) :: UINI(1 : 20, 1 : 20)
      SAVE UINI
      type(active) :: UMASK(0 : 21, 0 : 21)
      SAVE UMASK
      type(active) :: VINI(1 : 20, 1 : 20)
      SAVE VINI
      type(active) :: VMASK(0 : 21, 0 : 21)
      SAVE VMASK
      type(active) :: X(0 : 21)
      SAVE X
      type(active) :: Y(0 : 21)
      SAVE Y
C
C     **** statements ****
C
      END MODULE

      MODULE force
      use w2f__types
      use active_module
      use size
      IMPLICIT NONE
C
C     **** Global Variables ****
C
      type(active) :: UFORCE(1 : 20, 1 : 20)
      SAVE UFORCE
      type(active) :: VFORCE(1 : 20, 1 : 20)
      SAVE VFORCE
C
C     **** statements ****
C
      END MODULE

      MODULE data
      use w2f__types
      use active_module
      use size
      IMPLICIT NONE
C
C     **** Global Variables ****
C
      type(active) :: DEPTH_DATA(1 : 20, 1 : 20)
      SAVE DEPTH_DATA
      type(active) :: ETA_DATA(1 : 20, 1 : 20)
      SAVE ETA_DATA
      type(active) :: ETA_DATA_TIME(1 : 1000)
      SAVE ETA_DATA_TIME
      INTEGER(w2f__i4) NEDT
      SAVE NEDT
      type(active) :: U_DATA(1 : 20, 1 : 20)
      SAVE U_DATA
      type(active) :: V_DATA(1 : 20, 1 : 20)
      SAVE V_DATA
      type(active) :: ZONAL_TRANSPORT_DATA
      SAVE ZONAL_TRANSPORT_DATA
C
C     **** Local Variables and functions ****
C
      INTEGER(w2f__i4) NEDTMAX
      PARAMETER ( NEDTMAX = 1000)
C
C     **** statements ****
C
      END MODULE

      MODULE weights
      use w2f__types
      use active_module
      use size
      IMPLICIT NONE
C
C     **** Global Variables ****
C
      type(active) :: WEIGHT_DEPTH(1 : 20, 1 : 20, 1 : 20, 1 :  20)
      SAVE WEIGHT_DEPTH
      type(active) :: WEIGHT_ETA(1 : 20, 1 : 20)
      SAVE WEIGHT_ETA
      type(active) :: WEIGHT_GRADDEPTH(1 : 20, 1 : 20)
      SAVE WEIGHT_GRADDEPTH
      type(active) :: WEIGHT_LAPLDEPTH(1 : 20, 1 : 20)
      SAVE WEIGHT_LAPLDEPTH
      type(active) :: WEIGHT_U(1 : 20, 1 : 20)
      SAVE WEIGHT_U
      type(active) :: WEIGHT_V(1 : 20, 1 : 20)
      SAVE WEIGHT_V
      type(active) :: WEIGHT_ZONAL_TRANSPORT
      SAVE WEIGHT_ZONAL_TRANSPORT
      type(active) :: WF_DEPTH
      SAVE WF_DEPTH
      type(active) :: WF_ETA
      SAVE WF_ETA
      type(active) :: WF_GRADDEPTH
      SAVE WF_GRADDEPTH
      type(active) :: WF_LAPLDEPTH
      SAVE WF_LAPLDEPTH
      type(active) :: WF_U
      SAVE WF_U
      type(active) :: WF_V
      SAVE WF_V
      type(active) :: WF_ZONAL_TRANSPORT
      SAVE WF_ZONAL_TRANSPORT
C
C     **** statements ****
C
      END MODULE

      MODULE mini
      use w2f__types
      use active_module
      IMPLICIT NONE
C
C     **** Global Variables ****
C
      type(active) :: DF1
      SAVE DF1
      type(active) :: DXMIN
      SAVE DXMIN
      type(active) :: EPSG
      SAVE EPSG
      type(active) :: EPS_GRAD
      SAVE EPS_GRAD
      type(active) :: FACTR
      SAVE FACTR
      INTEGER(w2f__i4) IMPRES
      SAVE IMPRES
      INTEGER(w2f__i4) IPRINT
      SAVE IPRINT
      INTEGER(w2f__i4) MODE
      SAVE MODE
      INTEGER(w2f__i4) NITER
      SAVE NITER
      INTEGER(w2f__i4) NSIM
      SAVE NSIM
      type(active) :: PGTOL
      SAVE PGTOL
C
C     **** statements ****
C
      END MODULE

      MODULE size_small
      use w2f__types
      use active_module
      IMPLICIT NONE
C
C     **** Local Variables and functions ****
C
      INTEGER(w2f__i4) NX
      PARAMETER ( NX = 20)
      INTEGER(w2f__i4) NY
      PARAMETER ( NY = 8)
C
C     **** statements ****
C
      END MODULE

      SUBROUTINE inifields()
      use w2f__types
      use active_module
      use size
      use parms
      use vars
      use pfields
      use force
      use data
      use weights
      IMPLICIT NONE
C
C     **** Local Variables and functions ****
C
      INTEGER(w2f__i4) IX
      INTEGER(w2f__i4) IX2
      INTEGER(w2f__i4) IY
      INTEGER(w2f__i4) IY2
C
C     **** statements ****
C
      NT = 0
      NTSPINUP = 0
      DT%v = 0.0D00
      START_TIME%v = 0.0D00
      DT_DUMP%v = 0.0D00
      CALL zero_deriv(DT)
      CALL zero_deriv(START_TIME)
      CALL zero_deriv(DT_DUMP)
      ITERATION = -9999
      RINI%v = 0.0D00
      OM%v = 0.0D00
      F0%v = 0.0D00
      BETA%v = 0.0D00
      XSTART%v = 0.0D00
      YSTART%v = 0.0D00
      CALL zero_deriv(RINI)
      CALL zero_deriv(OM)
      CALL zero_deriv(F0)
      CALL zero_deriv(BETA)
      CALL zero_deriv(XSTART)
      CALL zero_deriv(YSTART)
      XPERIODIC = .FALSE.
      YPERIODIC = .FALSE.
      SPHERICAL = .FALSE.
      CARTESIAN = .FALSE.
      QUADFRIC = .FALSE.
      SUPPRESSIO = .FALSE.
      FULLIO = .FALSE.
      INITIAL_GRAD = .FALSE.
      GRAD_CHECK = .FALSE.
      OPTIMIZE = .FALSE.
      CALC_HESS = .FALSE.
      FOUTNAME = ' '
      RUNNAME = ' '
      DEPTHFILE = ' '
      FORCINGFILE = ' '
      UINIFILE = ' '
      VINIFILE = ' '
      ETAINIFILE = ' '
      NCDATAFILE = ' '
      WF_DEPTH%v = 0.0D00
      WF_ETA%v = 0.0D00
      WF_U%v = 0.0D00
      WF_V%v = 0.0D00
      WF_ZONAL_TRANSPORT%v = 0.0D00
      WF_LAPLDEPTH%v = 0.0D00
      WF_GRADDEPTH%v = 0.0D00
      CALL zero_deriv(WF_DEPTH)
      CALL zero_deriv(WF_ETA)
      CALL zero_deriv(WF_U)
      CALL zero_deriv(WF_V)
      CALL zero_deriv(WF_ZONAL_TRANSPORT)
      CALL zero_deriv(WF_LAPLDEPTH)
      CALL zero_deriv(WF_GRADDEPTH)
      DO IX = 0, 21, 1
        X(INT(IX))%v = 0.0D00
        CALL zero_deriv(X(INT(IX)))
      END DO
      DO IY = 0, 21, 1
        Y(INT(IY))%v = 0.0D00
        CALL zero_deriv(Y(INT(IY)))
      END DO
      DO IX = 0, 20, 1
        DX(INT(IX))%v = 0.0D00
        CALL zero_deriv(DX(INT(IX)))
      END DO
      DO IY = 0, 20, 1
        DY(INT(IY))%v = 0.0D00
        CALL zero_deriv(DY(INT(IY)))
      END DO
      DO IY = 0, 21, 1
        RX(INT(IY))%v = 0.0D00
        CALL zero_deriv(RX(INT(IY)))
      END DO
      RY%v = 0.0D00
      CALL zero_deriv(RY)
      DO IY = 0, 21, 1
        HY(INT(IY))%v = 0.0D00
        CALL zero_deriv(HY(INT(IY)))
      END DO
      DT%v = 0.0D00
      CALL zero_deriv(DT)
      DO IY = 1, 20, 1
        DO IX = 1, 20, 1
          UFORCE(INT(IX),INT(IY))%v = 0.0D00
          VFORCE(INT(IX),INT(IY))%v = 0.0D00
          FCORIU(INT(IX),INT(IY))%v = 0.0D00
          FCORIV(INT(IX),INT(IY))%v = 0.0D00
          INIDEPTH(INT(IX),INT(IY))%v = 0.0D00
          UINI(INT(IX),INT(IY))%v = 0.0D00
          VINI(INT(IX),INT(IY))%v = 0.0D00
          ETAINI(INT(IX),INT(IY))%v = 0.0D00
          SCALEDEPTH(INT(IX),INT(IY))%v = 0.0D00
          U_DATA(INT(IX),INT(IY))%v = 0.0D00
          V_DATA(INT(IX),INT(IY))%v = 0.0D00
          ETA_DATA(INT(IX),INT(IY))%v = 0.0D00
          DEPTH_DATA(INT(IX),INT(IY))%v = 0.0D00
          WEIGHT_U(INT(IX),INT(IY))%v = 0.0D00
          WEIGHT_V(INT(IX),INT(IY))%v = 0.0D00
          WEIGHT_ETA(INT(IX),INT(IY))%v = 0.0D00
          WEIGHT_LAPLDEPTH(INT(IX),INT(IY))%v = 0.0D00
          WEIGHT_GRADDEPTH(INT(IX),INT(IY))%v = 0.0D00
          CALL zero_deriv(UFORCE(INT(IX),INT(IY)))
          CALL zero_deriv(VFORCE(INT(IX),INT(IY)))
          CALL zero_deriv(FCORIU(INT(IX),INT(IY)))
          CALL zero_deriv(FCORIV(INT(IX),INT(IY)))
          CALL zero_deriv(INIDEPTH(INT(IX),INT(IY)))
          CALL zero_deriv(UINI(INT(IX),INT(IY)))
          CALL zero_deriv(VINI(INT(IX),INT(IY)))
          CALL zero_deriv(ETAINI(INT(IX),INT(IY)))
          CALL zero_deriv(SCALEDEPTH(INT(IX),INT(IY)))
          CALL zero_deriv(U_DATA(INT(IX),INT(IY)))
          CALL zero_deriv(V_DATA(INT(IX),INT(IY)))
          CALL zero_deriv(ETA_DATA(INT(IX),INT(IY)))
          CALL zero_deriv(DEPTH_DATA(INT(IX),INT(IY)))
          CALL zero_deriv(WEIGHT_U(INT(IX),INT(IY)))
          CALL zero_deriv(WEIGHT_V(INT(IX),INT(IY)))
          CALL zero_deriv(WEIGHT_ETA(INT(IX),INT(IY)))
          CALL zero_deriv(WEIGHT_LAPLDEPTH(INT(IX),INT(IY)))
          CALL zero_deriv(WEIGHT_GRADDEPTH(INT(IX),INT(IY)))
        END DO
      END DO
      DO IY = 1, 20, 1
        DO IY2 = 1, 20, 1
          DO IX = 1, 20, 1
            DO IX2 = 1, 20, 1
              WEIGHT_DEPTH(INT(IX),INT(IX2),INT(IY),INT(IY2))%v = 0.0D00
              CALL zero_deriv(WEIGHT_DEPTH(INT(IX),INT(IX2),INT(IY),INT(
     +IY2)))
            END DO
          END DO
        END DO
      END DO
      ZONAL_TRANSPORT_DATA%v = 0.0D00
      WEIGHT_ZONAL_TRANSPORT%v = 0.0D00
      CALL zero_deriv(ZONAL_TRANSPORT_DATA)
      CALL zero_deriv(WEIGHT_ZONAL_TRANSPORT)
      DO IX = 0, 21, 1
        DO IY = 0, 21, 1
          DEPTH(INT(IX),INT(IY))%v = 0.0D00
          FRICT(INT(IX),INT(IY))%v = 0.0D00
          U(INT(IX),INT(IY))%v = 0.0D00
          V(INT(IX),INT(IY))%v = 0.0D00
          ETA(INT(IX),INT(IY))%v = 0.0D00
          UMASK(INT(IX),INT(IY))%v = 0.0D00
          VMASK(INT(IX),INT(IY))%v = 0.0D00
          ETAMASK(INT(IX),INT(IY))%v = 0.0D00
          HU(INT(IX),INT(IY))%v = 0.0D00
          HV(INT(IX),INT(IY))%v = 0.0D00
          INVHU(INT(IX),INT(IY))%v = 0.0D00
          INVHV(INT(IX),INT(IY))%v = 0.0D00
          CALL zero_deriv(DEPTH(INT(IX),INT(IY)))
          CALL zero_deriv(FRICT(INT(IX),INT(IY)))
          CALL zero_deriv(U(INT(IX),INT(IY)))
          CALL zero_deriv(V(INT(IX),INT(IY)))
          CALL zero_deriv(ETA(INT(IX),INT(IY)))
          CALL zero_deriv(UMASK(INT(IX),INT(IY)))
          CALL zero_deriv(VMASK(INT(IX),INT(IY)))
          CALL zero_deriv(ETAMASK(INT(IX),INT(IY)))
          CALL zero_deriv(HU(INT(IX),INT(IY)))
          CALL zero_deriv(HV(INT(IX),INT(IY)))
          CALL zero_deriv(INVHU(INT(IX),INT(IY)))
          CALL zero_deriv(INVHV(INT(IX),INT(IY)))
        END DO
      END DO
      RETURN
      END SUBROUTINE

      SUBROUTINE readparms()
      use w2f__types
      use active_module
      IMPLICIT NONE
C
C     **** Local Variables and functions ****
C
      EXTERNAL check_cfl
      EXTERNAL ini_scales
      EXTERNAL make_masks
      EXTERNAL prep_coriolis
      EXTERNAL prep_depth
      EXTERNAL read_data_fields
      EXTERNAL read_data_file
C
C     **** statements ****
C
      CALL read_data_file()
      CALL read_data_fields()
      CALL prep_depth()
      CALL check_cfl()
      CALL make_masks()
      CALL ini_scales()
      CALL prep_coriolis()
      RETURN
      END SUBROUTINE

      SUBROUTINE read_data_file()
      use w2f__types
      use active_module
      use size
      use parms
      use pfields
      use mini
      use weights
      IMPLICIT NONE
C
C     **** Global Variables ****
C
      REAL(w2f__8) OpenAD_Symbol_0
      REAL(w2f__8) OpenAD_Symbol_1
      REAL(w2f__8) OpenAD_Symbol_2
      REAL(w2f__8) OpenAD_Symbol_3
      REAL(w2f__8) OpenAD_Symbol_5
      REAL(w2f__8) OpenAD_Symbol_6
      REAL(w2f__8) OpenAD_Symbol_7
      REAL(w2f__8) OpenAD_Symbol_9
      REAL(w2f__8) OpenAD_Symbol_11
      REAL(w2f__8) OpenAD_Symbol_12
      REAL(w2f__8) OpenAD_Symbol_13
      REAL(w2f__8) OpenAD_Symbol_14
      REAL(w2f__8) OpenAD_Symbol_15
      REAL(w2f__8) OpenAD_Symbol_21
      REAL(w2f__8) OpenAD_Symbol_17
      REAL(w2f__8) OpenAD_Symbol_18
      REAL(w2f__8) OpenAD_Symbol_23
      REAL(w2f__8) OpenAD_Symbol_19
      REAL(w2f__8) OpenAD_Symbol_24
      REAL(w2f__8) OpenAD_Symbol_25
      REAL(w2f__8) OpenAD_Symbol_26
      REAL(w2f__8) OpenAD_Symbol_31
      REAL(w2f__8) OpenAD_Symbol_27
      REAL(w2f__8) OpenAD_Symbol_32
      REAL(w2f__8) OpenAD_Symbol_28
      REAL(w2f__8) OpenAD_Symbol_29
      REAL(w2f__8) OpenAD_Symbol_34
      REAL(w2f__8) OpenAD_Symbol_35
      REAL(w2f__8) OpenAD_Symbol_40
      REAL(w2f__8) OpenAD_Symbol_36
      REAL(w2f__8) OpenAD_Symbol_37
      REAL(w2f__8) OpenAD_Symbol_42
      REAL(w2f__8) OpenAD_Symbol_43
      REAL(w2f__8) OpenAD_Symbol_39
      REAL(w2f__8) OpenAD_Symbol_44
      REAL(w2f__8) OpenAD_Symbol_45
      REAL(w2f__8) OpenAD_Symbol_50
      REAL(w2f__8) OpenAD_Symbol_46
      REAL(w2f__8) OpenAD_Symbol_52
      REAL(w2f__8) OpenAD_Symbol_48
      REAL(w2f__8) OpenAD_Symbol_53
      REAL(w2f__8) OpenAD_Symbol_49
      REAL(w2f__8) OpenAD_Symbol_54
      REAL(w2f__8) OpenAD_Symbol_56
      REAL(w2f__8) OpenAD_Symbol_720
      type(active) :: OpenAD_Symbol_721
      REAL(w2f__8) OpenAD_Symbol_722
      REAL(w2f__8) OpenAD_Symbol_718
      type(active) :: OpenAD_Symbol_723
      REAL(w2f__8) OpenAD_Symbol_719
      REAL(w2f__8) OpenAD_Symbol_724
      REAL(w2f__8) OpenAD_Symbol_725
      REAL(w2f__8) OpenAD_Symbol_730
      REAL(w2f__8) OpenAD_Symbol_726
      type(active) :: OpenAD_Symbol_731
      type(active) :: OpenAD_Symbol_727
      REAL(w2f__8) OpenAD_Symbol_732
      REAL(w2f__8) OpenAD_Symbol_728
      type(active) :: OpenAD_Symbol_733
      type(active) :: OpenAD_Symbol_729
      REAL(w2f__8) OpenAD_Symbol_734
      type(active) :: OpenAD_Symbol_735
      REAL(w2f__8) OpenAD_Symbol_740
      REAL(w2f__8) OpenAD_Symbol_736
      REAL(w2f__8) OpenAD_Symbol_741
      type(active) :: OpenAD_Symbol_737
      REAL(w2f__8) OpenAD_Symbol_742
      REAL(w2f__8) OpenAD_Symbol_738
      type(active) :: OpenAD_Symbol_743
      REAL(w2f__8) OpenAD_Symbol_739
      REAL(w2f__8) OpenAD_Symbol_744
      type(active) :: OpenAD_Symbol_745
      REAL(w2f__8) OpenAD_Symbol_750
      REAL(w2f__8) OpenAD_Symbol_746
      type(active) :: OpenAD_Symbol_751
      type(active) :: OpenAD_Symbol_747
      REAL(w2f__8) OpenAD_Symbol_748
      type(active) :: OpenAD_Symbol_749
C
C     **** Local Variables and functions ****
C
      type(active) :: DELX
      type(active) :: DELY
      EXTERNAL determine_data_time
      INTEGER(w2f__i4) IADRH0
      INTEGER(w2f__i4) IADRH1
      INTEGER(w2f__i4) IX
      INTEGER(w2f__i4) IY
      EXTERNAL readhack
      CHARACTER(4) t__15
C
C     **** statements ****
C
C     open(20,file='data',form='formatted',status='old')
      t__15 = 'OLD '
      OPEN(UNIT = 20, FORM = 'FORMATTED', STATUS = t__15(1_w2f__i8 : 3)
     > , FILE = 'data')
      READ(20, *)
      read(20,*) nt,ntspinup,dt%v,start_time%v,dt_dump%v
      READ(20, *)
      read(20,*) rini%v,f0%v,beta%v
      READ(20, *)
      read(20,*) xstart%v,ystart%v
      READ(20, *)
      read(20,*) delx%v,dely%v
      READ(20, *)
      read(20,*)xperiodic,yperiodic,spherical,cartesian
      READ(20, *)
      read(20,*)fullio,suppressio
      READ(20, *)
      read(20,*)initial_grad,grad_check,optimize,calc_hess
      READ(20, *)
      read(20,'(A80)')ncdatafile
      READ(20, *)
      read(20,'(A80)')ncrestartfile
      READ(20, *)
      read(20,'(A80)')foutname
      READ(20, *)
      read(20,'(A80)')runname
      READ(20, *)
      read(20,*) wf_depth%v,wf_eta%v,wf_u%v,wf_v%v,wf_zonal_transport%v,
     +wf_lapldepth%v,wf_graddepth%v
      READ(20, *)
      read(20,*)nsim
      READ(20, *)
      read(20,*) epsg%v,df1%v,dxmin%v,niter,impres,mode
      READ(20, *)
      read(20,*) eps_grad%v,pgtol%v,factr%v,iprint
C     close(20)
      CLOSE(UNIT = 20)
      IF(CARTESIAN .AND. SPHERICAL) THEN
        WRITE(*, *) 'grid specification is ambiguous'
      ELSE
        IF(.NOT.(CARTESIAN .OR. SPHERICAL)) THEN
          WRITE(*, *) 'grid specification is ambiguous'
        ENDIF
      ENDIF
      IF(SPHERICAL .AND. YPERIODIC) THEN
        WRITE(*, *) 'spherical grid and periodic boundary conditions'
        WRITE(*, *) 'in latitude do not make sense'
      ENDIF
      IF (YPERIODIC .AND. (SPHERICAL .OR. (CARTESIAN .AND. (BETA%v .ne. 
     +0.0D00)))) THEN
        WRITE(*, *) 'yperiodic boundaries only make sense on an f-pla'
     >  // 'ne'
      ENDIF
      IF(SPHERICAL) THEN
        DO IY = 0, 21, 1
          OpenAD_Symbol_5 = (DELY%v/6.371D+06)
          OpenAD_Symbol_6 = (REAL(IY) +(-5.0D-01))
          OpenAD_Symbol_2 = (OpenAD_Symbol_5 * OpenAD_Symbol_6)
          OpenAD_Symbol_11 = (YSTART%v+(OpenAD_Symbol_2/1.74533000000000
     +014518D-02))
          OpenAD_Symbol_0 = 1_w2f__i8
          OpenAD_Symbol_9 = (INT(1_w2f__i8) / 6.371D+06)
          OpenAD_Symbol_7 = OpenAD_Symbol_6
          OpenAD_Symbol_3 = (INT(1_w2f__i8) /
     >  1.74533000000000014518D-02)
          OpenAD_Symbol_1 = 1_w2f__i8
          Y(INT(IY))%v = OpenAD_Symbol_11
          OpenAD_Symbol_718 = (OpenAD_Symbol_9 * OpenAD_Symbol_7)
          OpenAD_Symbol_719 = (OpenAD_Symbol_718 * OpenAD_Symbol_3)
          OpenAD_Symbol_720 = (OpenAD_Symbol_719 * OpenAD_Symbol_1)
          OpenAD_Symbol_722 = OpenAD_Symbol_0
          CALL setderiv(OpenAD_Symbol_723,YSTART)
          CALL setderiv(OpenAD_Symbol_721,DELY)
          CALL sax(OpenAD_Symbol_720,OpenAD_Symbol_721,Y(IY))
          CALL saxpy(OpenAD_Symbol_722,OpenAD_Symbol_723,Y(IY))
        END DO
        DO IX = 0, 21, 1
          OpenAD_Symbol_17 = (DELX%v/6.371D+06)
          OpenAD_Symbol_18 = (REAL(IX) +(-5.0D-01))
          OpenAD_Symbol_14 = (OpenAD_Symbol_17 * OpenAD_Symbol_18)
          OpenAD_Symbol_23 = (XSTART%v+(OpenAD_Symbol_14/1.7453300000000
     +0014518D-02))
          OpenAD_Symbol_12 = 1_w2f__i8
          OpenAD_Symbol_21 = (INT(1_w2f__i8) / 6.371D+06)
          OpenAD_Symbol_19 = OpenAD_Symbol_18
          OpenAD_Symbol_15 = (INT(1_w2f__i8) /
     >  1.74533000000000014518D-02)
          OpenAD_Symbol_13 = 1_w2f__i8
          X(INT(IX))%v = OpenAD_Symbol_23
          OpenAD_Symbol_724 = (OpenAD_Symbol_21 * OpenAD_Symbol_19)
          OpenAD_Symbol_725 = (OpenAD_Symbol_724 * OpenAD_Symbol_15)
          OpenAD_Symbol_726 = (OpenAD_Symbol_725 * OpenAD_Symbol_13)
          OpenAD_Symbol_728 = OpenAD_Symbol_12
          CALL setderiv(OpenAD_Symbol_729,XSTART)
          CALL setderiv(OpenAD_Symbol_727,DELX)
          CALL sax(OpenAD_Symbol_726,OpenAD_Symbol_727,X(IX))
          CALL saxpy(OpenAD_Symbol_728,OpenAD_Symbol_729,X(IX))
        END DO
      ELSE
        IF(CARTESIAN) THEN
          DO IX = 0, 21, 1
            OpenAD_Symbol_49 = (REAL(IX) +(-5.0D-01))
            OpenAD_Symbol_52 = (DELX%v*OpenAD_Symbol_49)
            OpenAD_Symbol_50 = OpenAD_Symbol_49
            X(INT(IX))%v = OpenAD_Symbol_52
            OpenAD_Symbol_748 = OpenAD_Symbol_50
            CALL setderiv(OpenAD_Symbol_749,DELX)
            CALL sax(OpenAD_Symbol_748,OpenAD_Symbol_749,X(IX))
          END DO
          DO IY = 0, 21, 1
            OpenAD_Symbol_53 = (REAL(IY) +(-5.0D-01))
            OpenAD_Symbol_56 = (DELY%v*OpenAD_Symbol_53)
            OpenAD_Symbol_54 = OpenAD_Symbol_53
            Y(INT(IY))%v = OpenAD_Symbol_56
            OpenAD_Symbol_750 = OpenAD_Symbol_54
            CALL setderiv(OpenAD_Symbol_751,DELY)
            CALL sax(OpenAD_Symbol_750,OpenAD_Symbol_751,Y(IY))
          END DO
        ENDIF
      ENDIF
      DO IX = 0, 20, 1
        DX(INT(IX))%v = (X(IX+1)%v-X(IX)%v)
        OpenAD_Symbol_24 = 1_w2f__i8
        OpenAD_Symbol_25 = (-1_w2f__i8)
        OpenAD_Symbol_730 = OpenAD_Symbol_24
        OpenAD_Symbol_732 = OpenAD_Symbol_25
        CALL setderiv(OpenAD_Symbol_733,X(IX))
        CALL setderiv(OpenAD_Symbol_731,X(IX+1))
        CALL sax(OpenAD_Symbol_730,OpenAD_Symbol_731,DX(IX))
        CALL saxpy(OpenAD_Symbol_732,OpenAD_Symbol_733,DX(IX))
      END DO
      DO IY = 0, 20, 1
        DY(INT(IY))%v = (Y(IY+1)%v-Y(IY)%v)
        OpenAD_Symbol_26 = 1_w2f__i8
        OpenAD_Symbol_27 = (-1_w2f__i8)
        OpenAD_Symbol_734 = OpenAD_Symbol_26
        OpenAD_Symbol_736 = OpenAD_Symbol_27
        CALL setderiv(OpenAD_Symbol_737,Y(IY))
        CALL setderiv(OpenAD_Symbol_735,Y(IY+1))
        CALL sax(OpenAD_Symbol_734,OpenAD_Symbol_735,DY(IY))
        CALL saxpy(OpenAD_Symbol_736,OpenAD_Symbol_737,DY(IY))
      END DO
      DO IY = 1, 20, 1
        IF(SPHERICAL) THEN
          OpenAD_Symbol_39 = (Y(IY)%v+Y(IY+1)%v)
          OpenAD_Symbol_36 = (OpenAD_Symbol_39 * 5.0D-01)
          OpenAD_Symbol_34 = (OpenAD_Symbol_36 *
     >  1.74533000000000014518D-02)
          OpenAD_Symbol_31 = COS(OpenAD_Symbol_34)
          OpenAD_Symbol_28 = (OpenAD_Symbol_31 * 6.371D+06)
          RX(INT(IY))%v = (OpenAD_Symbol_28*1.74533000000000014518D-02)
          OpenAD_Symbol_42 = 1_w2f__i8
          OpenAD_Symbol_43 = 1_w2f__i8
          OpenAD_Symbol_40 = 5.0D-01
          OpenAD_Symbol_37 = 1.74533000000000014518D-02
          OpenAD_Symbol_35 = (- SIN(OpenAD_Symbol_34))
          OpenAD_Symbol_32 = 6.371D+06
          OpenAD_Symbol_29 = 1.74533000000000014518D-02
          OpenAD_Symbol_738 = (OpenAD_Symbol_32 * OpenAD_Symbol_29)
          OpenAD_Symbol_739 = (OpenAD_Symbol_35 * OpenAD_Symbol_738)
          OpenAD_Symbol_740 = (OpenAD_Symbol_37 * OpenAD_Symbol_739)
          OpenAD_Symbol_741 = (OpenAD_Symbol_40 * OpenAD_Symbol_740)
          OpenAD_Symbol_742 = (OpenAD_Symbol_42 * OpenAD_Symbol_741)
          OpenAD_Symbol_744 = (OpenAD_Symbol_43 * OpenAD_Symbol_741)
          CALL setderiv(OpenAD_Symbol_745,Y(IY+1))
          CALL setderiv(OpenAD_Symbol_743,Y(IY))
          CALL sax(OpenAD_Symbol_742,OpenAD_Symbol_743,RX(IY))
          CALL saxpy(OpenAD_Symbol_744,OpenAD_Symbol_745,RX(IY))
        ELSE
          IF(CARTESIAN) THEN
            RX(INT(IY))%v = 1.0D00
            CALL zero_deriv(RX(INT(IY)))
          ENDIF
        ENDIF
      END DO
      IF(SPHERICAL) THEN
        RY%v = 1.11195D+05
        CALL zero_deriv(RY)
      ELSE
        IF(CARTESIAN) THEN
          RY%v = 1.0D00
          CALL zero_deriv(RY)
        ENDIF
      ENDIF
      DO IY = 1, 21, 1
        IF(SPHERICAL) THEN
          OpenAD_Symbol_44 = (Y(IY)%v*1.74533000000000014518D-02)
          OpenAD_Symbol_48 = COS(OpenAD_Symbol_44)
          OpenAD_Symbol_46 = 1.74533000000000014518D-02
          OpenAD_Symbol_45 = (- SIN(OpenAD_Symbol_44))
          HY(INT(IY))%v = OpenAD_Symbol_48
          OpenAD_Symbol_746 = (OpenAD_Symbol_46 * OpenAD_Symbol_45)
          CALL setderiv(OpenAD_Symbol_747,Y(IY))
          CALL sax(OpenAD_Symbol_746,OpenAD_Symbol_747,HY(IY))
        ELSE
          IF(CARTESIAN) THEN
            HY(INT(IY))%v = 1.0D00
            CALL zero_deriv(HY(INT(IY)))
          ENDIF
        ENDIF
      END DO
      CALL determine_data_time(NCDATAFILE)
      RETURN
      END SUBROUTINE

      SUBROUTINE read_data_fields()
      use w2f__types
      use active_module
      use size
      use parms
      use pfields
      use force
      IMPLICIT NONE
C
C     **** Local Variables and functions ****
C
      EXTERNAL boundary_conditions
      LOGICAL(w2f__i4) EXISTS
      INTEGER(w2f__i4) IX
      INTEGER(w2f__i4) IY
      INTEGER(w2f__i4) MYNX
      INTEGER(w2f__i4) MYNY
      type(active) :: MYTIME
      EXTERNAL read_extended_field
      EXTERNAL read_field
      CHARACTER(80) STR1
      CHARACTER(80) STR2
      CHARACTER(80) STR3
      type(active) :: X_IN(1 : 20)
      type(active) :: Y_IN(1 : 20)
C
C     **** statements ****
C
      MYNX = 20
      MYNY = 20
      MYTIME%v = (-1.0D00)
      CALL zero_deriv(MYTIME)
      DO IX = 1, 20, 1
        X_IN(INT(IX))%v = 0.0D00
        CALL zero_deriv(X_IN(INT(IX)))
      END DO
      DO IY = 1, 20, 1
        Y_IN(INT(IY))%v = 0.0D00
        CALL zero_deriv(Y_IN(INT(IY)))
      END DO
C     inquire(file=ncdatafile,exist=exists)
      INQUIRE(EXIST = EXISTS, FILE = NCDATAFILE)
      IF(.NOT. EXISTS) THEN
        WRITE(*, *) NCDATAFILE, ' not found, cannot continue'
      ELSE
        STR1 = 'depth'
        STR2 = 'frict'
        CALL read_field(NCDATAFILE,MYTIME,STR1,INIDEPTH)
        CALL read_extended_field(NCDATAFILE,STR2,FRICT)
        IF (RINI%v .ne. 0.0D00) THEN
          WRITE(*,*)'rini = ',RINI%v
          WRITE(*, *) 'will overwrite frict with rini'
          DO IX = 1, 20, 1
            DO IY = 1, 20, 1
              FRICT(INT(IX),INT(IY))%v = RINI%v
              CALL setderiv(FRICT(IX,IY),RINI)
            END DO
          END DO
        ENDIF
        CALL boundary_conditions(MYNX,MYNY,FRICT,XPERIODIC,YPERIODIC)
        STR1 = 'uforce'
        STR2 = 'vforce'
        CALL read_field(NCDATAFILE,MYTIME,STR1,UFORCE)
        CALL read_field(NCDATAFILE,MYTIME,STR2,VFORCE)
        IF (START_TIME%v .eq. 0.0D00) THEN
          WRITE(*, *) 'cold start from initial fields'
          STR1 = 'uini'
          STR2 = 'vini'
          STR3 = 'etaini'
          CALL read_field(NCDATAFILE,START_TIME,STR1,UINI)
          CALL read_field(NCDATAFILE,START_TIME,STR2,VINI)
          CALL read_field(NCDATAFILE,START_TIME,STR3,ETAINI)
        ELSE
          WRITE(*,*)'warm restart from time ',START_TIME%v
          WRITE(*, *) 'in restart file ', NCRESTARTFILE
C         inquire( file = ncrestartfile, exist = exists ) 
          INQUIRE(EXIST = EXISTS, FILE = NCRESTARTFILE)
          IF(.NOT. EXISTS) THEN
            WRITE(*, *) NCRESTARTFILE, ' not found'
          ELSE
            STR1 = 'U'
            STR2 = 'V'
            STR3 = 'ETA'
            CALL read_field(NCRESTARTFILE,START_TIME,STR1,UINI)
            CALL read_field(NCRESTARTFILE,START_TIME,STR2,VINI)
            CALL read_field(NCRESTARTFILE,START_TIME,STR3,ETAINI)
          ENDIF
        ENDIF
      ENDIF
      RETURN
      END SUBROUTINE

      SUBROUTINE prep_depth()
      use w2f__types
      use active_module
      use size
      use parms
      use pfields
      IMPLICIT NONE
C
C     **** Local Variables and functions ****
C
      EXTERNAL boundary_conditions
      INTEGER(w2f__i4) IX
      INTEGER(w2f__i4) IY
      type(active) :: MAXDEPTH
      INTEGER(w2f__i4) MYNX
      INTEGER(w2f__i4) MYNY
      EXTERNAL read_depth_data
C
C     **** statements ****
C
      MYNX = 20
      MYNY = 20
      MAXDEPTH%v = 0.0D00
      CALL zero_deriv(MAXDEPTH)
      DO IY = 1, 20, 1
        DO IX = 1, 20, 1
          IF (INIDEPTH(IX,IY)%v .GT. MAXDEPTH%v) THEN
            MAXDEPTH%v = INIDEPTH(IX,IY)%v
            CALL setderiv(MAXDEPTH,INIDEPTH(IX,IY))
          ENDIF
        END DO
      END DO
      DO IX = 1, 20, 1
        DO IY = 1, 20, 1
          DEPTH(INT(IX),INT(IY))%v = INIDEPTH(IX,IY)%v
          CALL setderiv(DEPTH(IX,IY),INIDEPTH(IX,IY))
          SCALEDEPTH(INT(IX),INT(IY))%v = INIDEPTH(IX,IY)%v
          CALL setderiv(SCALEDEPTH(IX,IY),INIDEPTH(IX,IY))
          IF (DEPTH(IX,IY)%v .LT. MAXDEPTH%v) THEN
          ENDIF
        END DO
      END DO
      CALL read_depth_data()
      CALL boundary_conditions(MYNX,MYNY,DEPTH,XPERIODIC,YPERIODIC)
      RETURN
      END SUBROUTINE

      SUBROUTINE ini_scales()
      use w2f__types
      use active_module
      use size
      use pfields
      IMPLICIT NONE
C
C     **** Global Variables ****
C
      REAL(w2f__8) OpenAD_Symbol_73
      REAL(w2f__8) OpenAD_Symbol_74
      REAL(w2f__8) OpenAD_Symbol_75
      REAL(w2f__8) OpenAD_Symbol_80
      REAL(w2f__8) OpenAD_Symbol_76
      REAL(w2f__8) OpenAD_Symbol_81
      REAL(w2f__8) OpenAD_Symbol_77
      REAL(w2f__8) OpenAD_Symbol_82
      REAL(w2f__8) OpenAD_Symbol_78
      REAL(w2f__8) OpenAD_Symbol_83
      REAL(w2f__8) OpenAD_Symbol_79
      REAL(w2f__8) OpenAD_Symbol_84
      REAL(w2f__8) OpenAD_Symbol_85
      REAL(w2f__8) OpenAD_Symbol_86
      REAL(w2f__8) OpenAD_Symbol_87
      REAL(w2f__8) OpenAD_Symbol_765
      type(active) :: OpenAD_Symbol_770
      type(active) :: OpenAD_Symbol_766
      REAL(w2f__8) OpenAD_Symbol_771
      REAL(w2f__8) OpenAD_Symbol_767
      type(active) :: OpenAD_Symbol_772
      type(active) :: OpenAD_Symbol_768
      REAL(w2f__8) OpenAD_Symbol_773
      REAL(w2f__8) OpenAD_Symbol_769
      type(active) :: OpenAD_Symbol_774
      REAL(w2f__8) OpenAD_Symbol_775
      type(active) :: OpenAD_Symbol_776
C
C     **** Local Variables and functions ****
C
      INTEGER(w2f__i4) IX
      INTEGER(w2f__i4) IY
      INTEGER(w2f__i4) MYNX
      INTEGER(w2f__i4) MYNY
      type(active) :: VARETA
      EXTERNAL variance
      type(active) :: VARU
      type(active) :: VARV
C
C     **** statements ****
C
      MYNX = 20
      MYNY = 20
      CALL variance(MYNX,MYNY,UINI,UMASK,VARU)
      IF (VARU%v .eq. 0.0D00) THEN
        VARU%v = 1.0D00
        CALL zero_deriv(VARU)
      ENDIF
      CALL variance(MYNX,MYNY,VINI,VMASK,VARV)
      IF (VARU%v .eq. 0.0D00) THEN
        VARV%v = 1.0D00
        CALL zero_deriv(VARV)
      ENDIF
      CALL variance(MYNX,MYNY,ETAINI,ETAMASK,VARETA)
      IF (VARU%v .eq. 0.0D00) THEN
        VARETA%v = 1.0D00
        CALL zero_deriv(VARETA)
      ENDIF
      DO IY = 1, 20, 1
        DO IX = 1, 20, 1
          OpenAD_Symbol_73 = SQRT(VARU%v)
          OpenAD_Symbol_77 = (UMASK(IX,IY)%v*OpenAD_Symbol_73)
          OpenAD_Symbol_74 = OpenAD_Symbol_73
          OpenAD_Symbol_76 = (5.0D-01 / OpenAD_Symbol_73)
          OpenAD_Symbol_75 = UMASK(IX,IY)%v
          SCALEU(INT(IX),INT(IY))%v = OpenAD_Symbol_77
          OpenAD_Symbol_765 = (OpenAD_Symbol_76 * OpenAD_Symbol_75)
          OpenAD_Symbol_767 = OpenAD_Symbol_74
          CALL setderiv(OpenAD_Symbol_768,UMASK(IX,IY))
          CALL setderiv(OpenAD_Symbol_766,VARU)
          CALL sax(OpenAD_Symbol_765,OpenAD_Symbol_766,SCALEU(IX,IY))
          CALL saxpy(OpenAD_Symbol_767,OpenAD_Symbol_768,SCALEU(IX,IY))
          OpenAD_Symbol_78 = SQRT(VARV%v)
          OpenAD_Symbol_82 = (VMASK(IX,IY)%v*OpenAD_Symbol_78)
          OpenAD_Symbol_79 = OpenAD_Symbol_78
          OpenAD_Symbol_81 = (5.0D-01 / OpenAD_Symbol_78)
          OpenAD_Symbol_80 = VMASK(IX,IY)%v
          SCALEV(INT(IX),INT(IY))%v = OpenAD_Symbol_82
          OpenAD_Symbol_769 = (OpenAD_Symbol_81 * OpenAD_Symbol_80)
          OpenAD_Symbol_771 = OpenAD_Symbol_79
          CALL setderiv(OpenAD_Symbol_772,VMASK(IX,IY))
          CALL setderiv(OpenAD_Symbol_770,VARV)
          CALL sax(OpenAD_Symbol_769,OpenAD_Symbol_770,SCALEV(IX,IY))
          CALL saxpy(OpenAD_Symbol_771,OpenAD_Symbol_772,SCALEV(IX,IY))
          OpenAD_Symbol_83 = SQRT(VARETA%v)
          OpenAD_Symbol_87 = (ETAMASK(IX,IY)%v*OpenAD_Symbol_83)
          OpenAD_Symbol_84 = OpenAD_Symbol_83
          OpenAD_Symbol_86 = (5.0D-01 / OpenAD_Symbol_83)
          OpenAD_Symbol_85 = ETAMASK(IX,IY)%v
          SCALEETA(INT(IX),INT(IY))%v = OpenAD_Symbol_87
          OpenAD_Symbol_773 = (OpenAD_Symbol_86 * OpenAD_Symbol_85)
          OpenAD_Symbol_775 = OpenAD_Symbol_84
          CALL setderiv(OpenAD_Symbol_776,ETAMASK(IX,IY))
          CALL setderiv(OpenAD_Symbol_774,VARETA)
          CALL sax(OpenAD_Symbol_773,OpenAD_Symbol_774,SCALEETA(IX,IY))
          CALL saxpy(OpenAD_Symbol_775,OpenAD_Symbol_776,SCALEETA(IX,IY)
     +)
        END DO
      END DO
      RETURN
      END SUBROUTINE

      SUBROUTINE prep_coriolis()
      use w2f__types
      use active_module
      use size
      use parms
      use pfields
      IMPLICIT NONE
C
C     **** Global Variables ****
C
      REAL(w2f__8) OpenAD_Symbol_90
      REAL(w2f__8) OpenAD_Symbol_91
      REAL(w2f__8) OpenAD_Symbol_92
      REAL(w2f__8) OpenAD_Symbol_88
      REAL(w2f__8) OpenAD_Symbol_93
      REAL(w2f__8) OpenAD_Symbol_89
      REAL(w2f__8) OpenAD_Symbol_94
      REAL(w2f__8) OpenAD_Symbol_96
      REAL(w2f__8) OpenAD_Symbol_98
      REAL(w2f__8) OpenAD_Symbol_99
      REAL(w2f__8) OpenAD_Symbol_100
      REAL(w2f__8) OpenAD_Symbol_101
      REAL(w2f__8) OpenAD_Symbol_102
      REAL(w2f__8) OpenAD_Symbol_103
      REAL(w2f__8) OpenAD_Symbol_104
      REAL(w2f__8) OpenAD_Symbol_105
      REAL(w2f__8) OpenAD_Symbol_110
      REAL(w2f__8) OpenAD_Symbol_106
      REAL(w2f__8) OpenAD_Symbol_111
      REAL(w2f__8) OpenAD_Symbol_107
      REAL(w2f__8) OpenAD_Symbol_112
      REAL(w2f__8) OpenAD_Symbol_108
      REAL(w2f__8) OpenAD_Symbol_113
      REAL(w2f__8) OpenAD_Symbol_109
      REAL(w2f__8) OpenAD_Symbol_114
      REAL(w2f__8) OpenAD_Symbol_115
      REAL(w2f__8) OpenAD_Symbol_120
      REAL(w2f__8) OpenAD_Symbol_116
      REAL(w2f__8) OpenAD_Symbol_121
      REAL(w2f__8) OpenAD_Symbol_117
      REAL(w2f__8) OpenAD_Symbol_122
      REAL(w2f__8) OpenAD_Symbol_123
      REAL(w2f__8) OpenAD_Symbol_119
      REAL(w2f__8) OpenAD_Symbol_124
      REAL(w2f__8) OpenAD_Symbol_125
      REAL(w2f__8) OpenAD_Symbol_130
      REAL(w2f__8) OpenAD_Symbol_126
      REAL(w2f__8) OpenAD_Symbol_131
      REAL(w2f__8) OpenAD_Symbol_127
      REAL(w2f__8) OpenAD_Symbol_132
      REAL(w2f__8) OpenAD_Symbol_128
      REAL(w2f__8) OpenAD_Symbol_129
      REAL(w2f__8) OpenAD_Symbol_134
      REAL(w2f__8) OpenAD_Symbol_135
      REAL(w2f__8) OpenAD_Symbol_140
      REAL(w2f__8) OpenAD_Symbol_136
      REAL(w2f__8) OpenAD_Symbol_137
      REAL(w2f__8) OpenAD_Symbol_142
      REAL(w2f__8) OpenAD_Symbol_139
      REAL(w2f__8) OpenAD_Symbol_800
      REAL(w2f__8) OpenAD_Symbol_801
      type(active) :: OpenAD_Symbol_802
      REAL(w2f__8) OpenAD_Symbol_803
      type(active) :: OpenAD_Symbol_804
      REAL(w2f__8) OpenAD_Symbol_805
      REAL(w2f__8) OpenAD_Symbol_810
      type(active) :: OpenAD_Symbol_806
      type(active) :: OpenAD_Symbol_811
      REAL(w2f__8) OpenAD_Symbol_807
      REAL(w2f__8) OpenAD_Symbol_812
      type(active) :: OpenAD_Symbol_808
      type(active) :: OpenAD_Symbol_813
      REAL(w2f__8) OpenAD_Symbol_809
      REAL(w2f__8) OpenAD_Symbol_814
      type(active) :: OpenAD_Symbol_815
      type(active) :: OpenAD_Symbol_820
      REAL(w2f__8) OpenAD_Symbol_816
      REAL(w2f__8) OpenAD_Symbol_821
      REAL(w2f__8) OpenAD_Symbol_817
      type(active) :: OpenAD_Symbol_822
      type(active) :: OpenAD_Symbol_818
      REAL(w2f__8) OpenAD_Symbol_823
      REAL(w2f__8) OpenAD_Symbol_819
      type(active) :: OpenAD_Symbol_824
      REAL(w2f__8) OpenAD_Symbol_780
      REAL(w2f__8) OpenAD_Symbol_825
      type(active) :: OpenAD_Symbol_781
      type(active) :: OpenAD_Symbol_826
      REAL(w2f__8) OpenAD_Symbol_777
      REAL(w2f__8) OpenAD_Symbol_782
      REAL(w2f__8) OpenAD_Symbol_778
      type(active) :: OpenAD_Symbol_783
      type(active) :: OpenAD_Symbol_779
      REAL(w2f__8) OpenAD_Symbol_784
      REAL(w2f__8) OpenAD_Symbol_785
      type(active) :: OpenAD_Symbol_790
      type(active) :: OpenAD_Symbol_786
      REAL(w2f__8) OpenAD_Symbol_791
      REAL(w2f__8) OpenAD_Symbol_787
      type(active) :: OpenAD_Symbol_792
      type(active) :: OpenAD_Symbol_788
      REAL(w2f__8) OpenAD_Symbol_793
      REAL(w2f__8) OpenAD_Symbol_789
      REAL(w2f__8) OpenAD_Symbol_794
      type(active) :: OpenAD_Symbol_795
      REAL(w2f__8) OpenAD_Symbol_796
      type(active) :: OpenAD_Symbol_797
      REAL(w2f__8) OpenAD_Symbol_798
      type(active) :: OpenAD_Symbol_799
C
C     **** Local Variables and functions ****
C
      type(active) :: FAUX
      type(active) :: FCORI(0 : 21, 0 : 21)
      INTEGER(w2f__i4) IX
      INTEGER(w2f__i4) IY
      INTEGER(w2f__i4) MY
C
C     **** statements ****
C
      MY = NINT(REAL(20) * 5.0E-01)
      DO IY = 0, 21, 1
        IF(SPHERICAL) THEN
          OpenAD_Symbol_92 = (Y(IY)%v*1.74533000000000014518D-02)
          OpenAD_Symbol_88 = SIN(OpenAD_Symbol_92)
          OpenAD_Symbol_89 = (OM%v*2.0D00)
          OpenAD_Symbol_98 = (OpenAD_Symbol_88 * OpenAD_Symbol_89)
          OpenAD_Symbol_94 = 1.74533000000000014518D-02
          OpenAD_Symbol_93 = COS(OpenAD_Symbol_92)
          OpenAD_Symbol_90 = OpenAD_Symbol_89
          OpenAD_Symbol_96 = 2.0D00
          OpenAD_Symbol_91 = OpenAD_Symbol_88
          FAUX%v = OpenAD_Symbol_98
          OpenAD_Symbol_777 = (OpenAD_Symbol_94 * OpenAD_Symbol_93)
          OpenAD_Symbol_778 = (OpenAD_Symbol_96 * OpenAD_Symbol_91)
          OpenAD_Symbol_780 = (OpenAD_Symbol_777 * OpenAD_Symbol_90)
          CALL setderiv(OpenAD_Symbol_781,Y(IY))
          CALL setderiv(OpenAD_Symbol_779,OM)
          CALL sax(OpenAD_Symbol_778,OpenAD_Symbol_779,FAUX)
          CALL saxpy(OpenAD_Symbol_780,OpenAD_Symbol_781,FAUX)
        ELSE
          IF(CARTESIAN) THEN
            OpenAD_Symbol_101 = (Y(IY)%v-Y(MY)%v)
            OpenAD_Symbol_106 = (F0%v+BETA%v*OpenAD_Symbol_101)
            OpenAD_Symbol_99 = 1_w2f__i8
            OpenAD_Symbol_102 = OpenAD_Symbol_101
            OpenAD_Symbol_104 = 1_w2f__i8
            OpenAD_Symbol_105 = (-1_w2f__i8)
            OpenAD_Symbol_103 = BETA%v
            OpenAD_Symbol_100 = 1_w2f__i8
            FAUX%v = OpenAD_Symbol_106
            OpenAD_Symbol_782 = (OpenAD_Symbol_102 * OpenAD_Symbol_100)
            OpenAD_Symbol_784 = (OpenAD_Symbol_103 * OpenAD_Symbol_100)
            OpenAD_Symbol_785 = (OpenAD_Symbol_104 * OpenAD_Symbol_784)
            OpenAD_Symbol_787 = (OpenAD_Symbol_105 * OpenAD_Symbol_784)
            OpenAD_Symbol_789 = OpenAD_Symbol_99
            CALL setderiv(OpenAD_Symbol_790,F0)
            CALL setderiv(OpenAD_Symbol_788,Y(MY))
            CALL setderiv(OpenAD_Symbol_786,Y(IY))
            CALL setderiv(OpenAD_Symbol_783,BETA)
            CALL sax(OpenAD_Symbol_782,OpenAD_Symbol_783,FAUX)
            CALL saxpy(OpenAD_Symbol_785,OpenAD_Symbol_786,FAUX)
            CALL saxpy(OpenAD_Symbol_787,OpenAD_Symbol_788,FAUX)
            CALL saxpy(OpenAD_Symbol_789,OpenAD_Symbol_790,FAUX)
          ENDIF
        ENDIF
        DO IX = 0, 21, 1
          FCORI(INT(IX),INT(IY))%v = FAUX%v
          CALL setderiv(FCORI(IX,IY),FAUX)
        END DO
      END DO
      DO IX = 1, 20, 1
        DO IY = 1, 20, 1
          FAUX%v = (VMASK(IX+(-1),IY+1)%v+VMASK(IX,IY+1)%v+VMASK(IX,IY)%
     +v+VMASK(IX+(-1),IY)%v)
          OpenAD_Symbol_107 = 1_w2f__i8
          OpenAD_Symbol_109 = 1_w2f__i8
          OpenAD_Symbol_111 = 1_w2f__i8
          OpenAD_Symbol_112 = 1_w2f__i8
          OpenAD_Symbol_110 = 1_w2f__i8
          OpenAD_Symbol_108 = 1_w2f__i8
          OpenAD_Symbol_791 = (OpenAD_Symbol_109 * OpenAD_Symbol_108)
          OpenAD_Symbol_793 = (OpenAD_Symbol_110 * OpenAD_Symbol_108)
          OpenAD_Symbol_794 = (OpenAD_Symbol_111 * OpenAD_Symbol_793)
          OpenAD_Symbol_796 = (OpenAD_Symbol_112 * OpenAD_Symbol_793)
          OpenAD_Symbol_798 = OpenAD_Symbol_107
          CALL setderiv(OpenAD_Symbol_799,VMASK(IX+(-1),IY+1))
          CALL setderiv(OpenAD_Symbol_797,VMASK(IX+(-1),IY))
          CALL setderiv(OpenAD_Symbol_795,VMASK(IX,IY))
          CALL setderiv(OpenAD_Symbol_792,VMASK(IX,IY+1))
          CALL sax(OpenAD_Symbol_791,OpenAD_Symbol_792,FAUX)
          CALL saxpy(OpenAD_Symbol_794,OpenAD_Symbol_795,FAUX)
          CALL saxpy(OpenAD_Symbol_796,OpenAD_Symbol_797,FAUX)
          CALL saxpy(OpenAD_Symbol_798,OpenAD_Symbol_799,FAUX)
          IF (FAUX%v .eq. 0.0D00) THEN
            FAUX%v = 0.0D00
            CALL zero_deriv(FAUX)
          ELSE
            OpenAD_Symbol_142 = (UMASK(IX,IY)%v*2.5D-01)
            OpenAD_Symbol_140 = 2.5D-01
            FAUX%v = OpenAD_Symbol_142
            OpenAD_Symbol_825 = OpenAD_Symbol_140
            CALL setderiv(OpenAD_Symbol_826,UMASK(IX,IY))
            CALL sax(OpenAD_Symbol_825,OpenAD_Symbol_826,FAUX)
          ENDIF
          OpenAD_Symbol_116 = (FCORI(IX,IY)%v+FCORI(IX+(-1),IY)%v)
          OpenAD_Symbol_113 = (OpenAD_Symbol_116 * 5.0D-01)
          OpenAD_Symbol_121 = (FAUX%v*OpenAD_Symbol_113)
          OpenAD_Symbol_114 = OpenAD_Symbol_113
          OpenAD_Symbol_119 = 1_w2f__i8
          OpenAD_Symbol_120 = 1_w2f__i8
          OpenAD_Symbol_117 = 5.0D-01
          OpenAD_Symbol_115 = FAUX%v
          FCORIU(INT(IX),INT(IY))%v = OpenAD_Symbol_121
          OpenAD_Symbol_800 = (OpenAD_Symbol_117 * OpenAD_Symbol_115)
          OpenAD_Symbol_801 = (OpenAD_Symbol_119 * OpenAD_Symbol_800)
          OpenAD_Symbol_803 = (OpenAD_Symbol_120 * OpenAD_Symbol_800)
          OpenAD_Symbol_805 = OpenAD_Symbol_114
          CALL setderiv(OpenAD_Symbol_806,FAUX)
          CALL setderiv(OpenAD_Symbol_804,FCORI(IX+(-1),IY))
          CALL setderiv(OpenAD_Symbol_802,FCORI(IX,IY))
          CALL sax(OpenAD_Symbol_801,OpenAD_Symbol_802,FCORIU(IX,IY))
          CALL saxpy(OpenAD_Symbol_803,OpenAD_Symbol_804,FCORIU(IX,IY))
          CALL saxpy(OpenAD_Symbol_805,OpenAD_Symbol_806,FCORIU(IX,IY))
          FAUX%v = (UMASK(IX+1,IY+(-1))%v+UMASK(IX,IY+(-1))%v+UMASK(IX,I
     +Y)%v+UMASK(IX+1,IY)%v)
          OpenAD_Symbol_122 = 1_w2f__i8
          OpenAD_Symbol_124 = 1_w2f__i8
          OpenAD_Symbol_126 = 1_w2f__i8
          OpenAD_Symbol_127 = 1_w2f__i8
          OpenAD_Symbol_125 = 1_w2f__i8
          OpenAD_Symbol_123 = 1_w2f__i8
          OpenAD_Symbol_807 = (OpenAD_Symbol_124 * OpenAD_Symbol_123)
          OpenAD_Symbol_809 = (OpenAD_Symbol_125 * OpenAD_Symbol_123)
          OpenAD_Symbol_810 = (OpenAD_Symbol_126 * OpenAD_Symbol_809)
          OpenAD_Symbol_812 = (OpenAD_Symbol_127 * OpenAD_Symbol_809)
          OpenAD_Symbol_814 = OpenAD_Symbol_122
          CALL setderiv(OpenAD_Symbol_815,UMASK(IX+1,IY+(-1)))
          CALL setderiv(OpenAD_Symbol_813,UMASK(IX+1,IY))
          CALL setderiv(OpenAD_Symbol_811,UMASK(IX,IY))
          CALL setderiv(OpenAD_Symbol_808,UMASK(IX,IY+(-1)))
          CALL sax(OpenAD_Symbol_807,OpenAD_Symbol_808,FAUX)
          CALL saxpy(OpenAD_Symbol_810,OpenAD_Symbol_811,FAUX)
          CALL saxpy(OpenAD_Symbol_812,OpenAD_Symbol_813,FAUX)
          CALL saxpy(OpenAD_Symbol_814,OpenAD_Symbol_815,FAUX)
          IF (FAUX%v .eq. 0.0D00) THEN
            FAUX%v = 0.0D00
            CALL zero_deriv(FAUX)
          ELSE
            OpenAD_Symbol_139 = (VMASK(IX,IY)%v*2.5D-01)
            OpenAD_Symbol_137 = 2.5D-01
            FAUX%v = OpenAD_Symbol_139
            OpenAD_Symbol_823 = OpenAD_Symbol_137
            CALL setderiv(OpenAD_Symbol_824,VMASK(IX,IY))
            CALL sax(OpenAD_Symbol_823,OpenAD_Symbol_824,FAUX)
          ENDIF
          OpenAD_Symbol_131 = (FCORI(IX,IY)%v+FCORI(IX,IY+(-1))%v)
          OpenAD_Symbol_128 = (OpenAD_Symbol_131 * 5.0D-01)
          OpenAD_Symbol_136 = (FAUX%v*OpenAD_Symbol_128)
          OpenAD_Symbol_129 = OpenAD_Symbol_128
          OpenAD_Symbol_134 = 1_w2f__i8
          OpenAD_Symbol_135 = 1_w2f__i8
          OpenAD_Symbol_132 = 5.0D-01
          OpenAD_Symbol_130 = FAUX%v
          FCORIV(INT(IX),INT(IY))%v = OpenAD_Symbol_136
          OpenAD_Symbol_816 = (OpenAD_Symbol_132 * OpenAD_Symbol_130)
          OpenAD_Symbol_817 = (OpenAD_Symbol_134 * OpenAD_Symbol_816)
          OpenAD_Symbol_819 = (OpenAD_Symbol_135 * OpenAD_Symbol_816)
          OpenAD_Symbol_821 = OpenAD_Symbol_129
          CALL setderiv(OpenAD_Symbol_822,FAUX)
          CALL setderiv(OpenAD_Symbol_820,FCORI(IX,IY+(-1)))
          CALL setderiv(OpenAD_Symbol_818,FCORI(IX,IY))
          CALL sax(OpenAD_Symbol_817,OpenAD_Symbol_818,FCORIV(IX,IY))
          CALL saxpy(OpenAD_Symbol_819,OpenAD_Symbol_820,FCORIV(IX,IY))
          CALL saxpy(OpenAD_Symbol_821,OpenAD_Symbol_822,FCORIV(IX,IY))
        END DO
      END DO
      RETURN
      END SUBROUTINE

      SUBROUTINE make_masks()
      use w2f__types
      use active_module
      use size
      use parms
      use pfields
      IMPLICIT NONE
C
C     **** Local Variables and functions ****
C
      EXTERNAL boundary_conditions
      INTEGER(w2f__i4) IX
      INTEGER(w2f__i4) IY
      type(active) :: MINDEPTH
      INTEGER(w2f__i4) MYNX
      INTEGER(w2f__i4) MYNY
C
C     **** statements ****
C
      MYNX = 20
      MYNY = 20
      DO IX = 1, 20, 1
        DO IY = 1, 20, 1
          IF (DEPTH(IX,IY)%v .LT. DEPTH(IX+(-1),IY)%v) THEN
            MINDEPTH%v = DEPTH(IX,IY)%v
            CALL setderiv(MINDEPTH,DEPTH(IX,IY))
          ELSE
            MINDEPTH%v = DEPTH(IX+(-1),IY)%v
            CALL setderiv(MINDEPTH,DEPTH(IX+(-1),IY))
          ENDIF
          IF (MINDEPTH%v .ne. 0.0D00) THEN
            UMASK(INT(IX),INT(IY))%v = 1.0D00
            CALL zero_deriv(UMASK(INT(IX),INT(IY)))
          ELSE
            UMASK(INT(IX),INT(IY))%v = 0.0D00
            CALL zero_deriv(UMASK(INT(IX),INT(IY)))
          ENDIF
        END DO
      END DO
      DO IX = 1, 20, 1
        DO IY = 1, 20, 1
          IF (DEPTH(IX,IY)%v .LT. DEPTH(IX,IY+(-1))%v) THEN
            MINDEPTH%v = DEPTH(IX,IY)%v
            CALL setderiv(MINDEPTH,DEPTH(IX,IY))
          ELSE
            MINDEPTH%v = DEPTH(IX,IY+(-1))%v
            CALL setderiv(MINDEPTH,DEPTH(IX,IY+(-1)))
          ENDIF
          IF (MINDEPTH%v .ne. 0.0D00) THEN
            VMASK(INT(IX),INT(IY))%v = 1.0D00
            CALL zero_deriv(VMASK(INT(IX),INT(IY)))
          ELSE
            VMASK(INT(IX),INT(IY))%v = 0.0D00
            CALL zero_deriv(VMASK(INT(IX),INT(IY)))
          ENDIF
        END DO
      END DO
      DO IX = 1, 20, 1
        DO IY = 1, 20, 1
          IF (DEPTH(IX,IY)%v .ne. 0.0D00) THEN
            ETAMASK(INT(IX),INT(IY))%v = 1.0D00
            CALL zero_deriv(ETAMASK(INT(IX),INT(IY)))
          ELSE
            ETAMASK(INT(IX),INT(IY))%v = 0.0D00
            CALL zero_deriv(ETAMASK(INT(IX),INT(IY)))
          ENDIF
        END DO
      END DO
      CALL boundary_conditions(MYNX,MYNY,UMASK,XPERIODIC,YPERIODIC)
      CALL boundary_conditions(MYNX,MYNY,VMASK,XPERIODIC,YPERIODIC)
      RETURN
      END SUBROUTINE

      SUBROUTINE variance(NX, NY, F, FMASK, VARF)
      use w2f__types
      use active_module
      IMPLICIT NONE
C
C     **** Global Variables ****
C
      REAL(w2f__8) OpenAD_Symbol_143
      REAL(w2f__8) OpenAD_Symbol_144
      REAL(w2f__8) OpenAD_Symbol_145
      REAL(w2f__8) OpenAD_Symbol_150
      REAL(w2f__8) OpenAD_Symbol_146
      REAL(w2f__8) OpenAD_Symbol_151
      REAL(w2f__8) OpenAD_Symbol_152
      REAL(w2f__8) OpenAD_Symbol_148
      REAL(w2f__8) OpenAD_Symbol_153
      REAL(w2f__8) OpenAD_Symbol_149
      REAL(w2f__8) OpenAD_Symbol_154
      REAL(w2f__8) OpenAD_Symbol_155
      REAL(w2f__8) OpenAD_Symbol_160
      REAL(w2f__8) OpenAD_Symbol_161
      REAL(w2f__8) OpenAD_Symbol_157
      REAL(w2f__8) OpenAD_Symbol_158
      REAL(w2f__8) OpenAD_Symbol_163
      REAL(w2f__8) OpenAD_Symbol_159
      type(active) :: OpenAD_Symbol_830
      REAL(w2f__8) OpenAD_Symbol_831
      REAL(w2f__8) OpenAD_Symbol_827
      type(active) :: OpenAD_Symbol_832
      type(active) :: OpenAD_Symbol_828
      REAL(w2f__8) OpenAD_Symbol_833
      REAL(w2f__8) OpenAD_Symbol_829
      type(active) :: OpenAD_Symbol_834
      REAL(w2f__8) OpenAD_Symbol_835
      type(active) :: OpenAD_Symbol_840
      REAL(w2f__8) OpenAD_Symbol_836
      REAL(w2f__8) OpenAD_Symbol_841
      REAL(w2f__8) OpenAD_Symbol_837
      type(active) :: OpenAD_Symbol_842
      type(active) :: OpenAD_Symbol_838
      REAL(w2f__8) OpenAD_Symbol_843
      REAL(w2f__8) OpenAD_Symbol_839
      type(active) :: OpenAD_Symbol_844
C
C     **** Parameters and Result ****
C
      INTEGER(w2f__i4) NX
      INTEGER(w2f__i4) NY
      type(active) :: F(1 : NX, 1 : NY)
      type(active) :: FMASK(0 : INT((NX + 1)), 0 : INT((NY + 1)) )
      type(active) :: VARF
C
C     **** Local Variables and functions ****
C
      INTEGER(w2f__i8) t__20
      INTEGER(w2f__i8) t__24
      INTEGER(w2f__i8) t__21
      INTEGER(w2f__i8) t__26
      INTEGER(w2f__i8) t__22
      INTEGER(w2f__i8) t__29
      INTEGER(w2f__i8) t__23
      INTEGER(w2f__i8) t__32
      INTEGER(w2f__i4) IX
      INTEGER(w2f__i4) IY
      INTEGER(w2f__i4) K
      type(active) :: MEANF
      INTEGER(w2f__i8) t__25
      INTEGER(w2f__i8) t__27
      INTEGER(w2f__i8) t__28
      INTEGER(w2f__i8) t__30
      INTEGER(w2f__i8) t__31
      INTEGER(w2f__i8) t__33
C
C     **** Temporary variables ****
C
      INTEGER(w2f__i4) doloop_ub
      INTEGER(w2f__i4) doloop_ub0
      INTEGER(w2f__i4) doloop_ub1
      INTEGER(w2f__i4) doloop_ub2
C
C     **** statements ****
C
      t__20 = NX
      t__21 = NY
      t__24 = MAX(t__20, 0_w2f__i8)
      t__25 = t__24
      t__26 = MAX(t__21, 0_w2f__i8)
      t__27 = t__24 * t__26
      t__22 = INT(NX + 1)
      t__23 = INT(NY + 1)
      t__28 = t__22 + 1_w2f__i8
      t__29 = MAX(t__28, 0_w2f__i8)
      t__30 = t__29
      t__31 = t__23 + 1_w2f__i8
      t__32 = MAX(t__31, 0_w2f__i8)
      t__33 = t__29 * t__32
      VARF%v = 0.0D00
      MEANF%v = 0.0D00
      CALL zero_deriv(VARF)
      CALL zero_deriv(MEANF)
      K = 0
      doloop_ub = NY
      DO IY = 1, doloop_ub, 1
        doloop_ub0 = NX
        DO IX = 1, doloop_ub0, 1
          IF (FMASK(IX,IY)%v .ne. 0.0D00) THEN
            MEANF%v = (F(IX,IY)%v+MEANF%v)
            OpenAD_Symbol_143 = 1_w2f__i8
            OpenAD_Symbol_144 = 1_w2f__i8
            OpenAD_Symbol_827 = OpenAD_Symbol_143
            OpenAD_Symbol_829 = OpenAD_Symbol_144
            CALL setderiv(OpenAD_Symbol_830,MEANF)
            CALL setderiv(OpenAD_Symbol_828,F(IX,IY))
            CALL sax(OpenAD_Symbol_827,OpenAD_Symbol_828,MEANF)
            CALL saxpy(OpenAD_Symbol_829,OpenAD_Symbol_830,MEANF)
            K = K + 1
          ENDIF
        END DO
      END DO
      IF(K .ne. INT(0_w2f__i8)) THEN
        OpenAD_Symbol_145 = REAL(K)
        OpenAD_Symbol_148 = (MEANF%v/OpenAD_Symbol_145)
        OpenAD_Symbol_146 = (INT(1_w2f__i8) / OpenAD_Symbol_145)
        MEANF%v = OpenAD_Symbol_148
        OpenAD_Symbol_831 = OpenAD_Symbol_146
        CALL setderiv(OpenAD_Symbol_832,MEANF)
        CALL sax(OpenAD_Symbol_831,OpenAD_Symbol_832,MEANF)
      ENDIF
      doloop_ub1 = NY
      DO IY = 1, doloop_ub1, 1
        doloop_ub2 = NX
        DO IX = 1, doloop_ub2, 1
          OpenAD_Symbol_154 = (F(IX,IY)%v-MEANF%v)
          OpenAD_Symbol_151 = (OpenAD_Symbol_154 ** INT(2_w2f__i8))
          OpenAD_Symbol_159 = (VARF%v+FMASK(IX,IY)%v*OpenAD_Symbol_151)
          OpenAD_Symbol_149 = 1_w2f__i8
          OpenAD_Symbol_152 = OpenAD_Symbol_151
          OpenAD_Symbol_157 = 1_w2f__i8
          OpenAD_Symbol_158 = (-1_w2f__i8)
          OpenAD_Symbol_155 = (INT(2_w2f__i8) *(OpenAD_Symbol_154 **(
     > INT(2_w2f__i8) - INT(1_w2f__i8))))
          OpenAD_Symbol_153 = FMASK(IX,IY)%v
          OpenAD_Symbol_150 = 1_w2f__i8
          VARF%v = OpenAD_Symbol_159
          OpenAD_Symbol_833 = (OpenAD_Symbol_152 * OpenAD_Symbol_150)
          OpenAD_Symbol_835 = (OpenAD_Symbol_153 * OpenAD_Symbol_150)
          OpenAD_Symbol_836 = (OpenAD_Symbol_155 * OpenAD_Symbol_835)
          OpenAD_Symbol_837 = (OpenAD_Symbol_157 * OpenAD_Symbol_836)
          OpenAD_Symbol_839 = (OpenAD_Symbol_158 * OpenAD_Symbol_836)
          OpenAD_Symbol_841 = OpenAD_Symbol_149
          CALL setderiv(OpenAD_Symbol_842,VARF)
          CALL setderiv(OpenAD_Symbol_840,MEANF)
          CALL setderiv(OpenAD_Symbol_838,F(IX,IY))
          CALL setderiv(OpenAD_Symbol_834,FMASK(IX,IY))
          CALL sax(OpenAD_Symbol_833,OpenAD_Symbol_834,VARF)
          CALL saxpy(OpenAD_Symbol_837,OpenAD_Symbol_838,VARF)
          CALL saxpy(OpenAD_Symbol_839,OpenAD_Symbol_840,VARF)
          CALL saxpy(OpenAD_Symbol_841,OpenAD_Symbol_842,VARF)
        END DO
      END DO
      IF(K .GT. INT(1_w2f__i8)) THEN
        OpenAD_Symbol_160 = REAL(K + INT((-1_w2f__i8)))
        OpenAD_Symbol_163 = (VARF%v/OpenAD_Symbol_160)
        OpenAD_Symbol_161 = (INT(1_w2f__i8) / OpenAD_Symbol_160)
        VARF%v = OpenAD_Symbol_163
        OpenAD_Symbol_843 = OpenAD_Symbol_161
        CALL setderiv(OpenAD_Symbol_844,VARF)
        CALL sax(OpenAD_Symbol_843,OpenAD_Symbol_844,VARF)
      ENDIF
      RETURN
      END SUBROUTINE

      SUBROUTINE check_cfl()
      use w2f__types
      use active_module
      use size
      use parms
      use pfields
      IMPLICIT NONE
C
C     **** Global Variables ****
C
      REAL(w2f__8) OpenAD_Symbol_61
      REAL(w2f__8) OpenAD_Symbol_57
      REAL(w2f__8) OpenAD_Symbol_62
      REAL(w2f__8) OpenAD_Symbol_58
      REAL(w2f__8) OpenAD_Symbol_63
      REAL(w2f__8) OpenAD_Symbol_59
      REAL(w2f__8) OpenAD_Symbol_64
      REAL(w2f__8) OpenAD_Symbol_65
      REAL(w2f__8) OpenAD_Symbol_70
      REAL(w2f__8) OpenAD_Symbol_66
      REAL(w2f__8) OpenAD_Symbol_71
      REAL(w2f__8) OpenAD_Symbol_67
      REAL(w2f__8) OpenAD_Symbol_72
      REAL(w2f__8) OpenAD_Symbol_68
      REAL(w2f__8) OpenAD_Symbol_69
      REAL(w2f__8) OpenAD_Symbol_752
      type(active) :: OpenAD_Symbol_753
      REAL(w2f__8) OpenAD_Symbol_754
      REAL(w2f__8) OpenAD_Symbol_755
      REAL(w2f__8) OpenAD_Symbol_760
      REAL(w2f__8) OpenAD_Symbol_756
      REAL(w2f__8) OpenAD_Symbol_761
      REAL(w2f__8) OpenAD_Symbol_757
      type(active) :: OpenAD_Symbol_762
      type(active) :: OpenAD_Symbol_758
      REAL(w2f__8) OpenAD_Symbol_763
      REAL(w2f__8) OpenAD_Symbol_759
      type(active) :: OpenAD_Symbol_764
C
C     **** Local Variables and functions ****
C
      type(active) :: CFLX
      type(active) :: CFLY
      INTEGER(w2f__i4) IX
      INTEGER(w2f__i4) IY
      type(active) :: MAXIMUM
      type(active) :: MDEP
      type(active) :: MDX
      type(active) :: MDY
      type(active) :: MINIMUM
      type(active) :: WAVESPEED
C
C     **** statements ****
C
      MDEP%v = 0.0D00
      MDX%v = 9.99999999999999916114D+22
      MDY%v = 9.99999999999999916114D+22
      CALL zero_deriv(MDEP)
      CALL zero_deriv(MDX)
      CALL zero_deriv(MDY)
      DO IX = 1, 20, 1
        IF (DX(IX)%v .GT. MDX%v) THEN
          MINIMUM%v = MDX%v
          CALL setderiv(MINIMUM,MDX)
        ELSE
          MINIMUM%v = DX(IX)%v
          CALL setderiv(MINIMUM,DX(IX))
        ENDIF
        MDX%v = MINIMUM%v
        CALL setderiv(MDX,MINIMUM)
      END DO
      DO IY = 1, 20, 1
        IF (DY(IY)%v .GT. MDY%v) THEN
          MINIMUM%v = MDY%v
          CALL setderiv(MINIMUM,MDY)
        ELSE
          MINIMUM%v = DY(IY)%v
          CALL setderiv(MINIMUM,DY(IY))
        ENDIF
        MDY%v = MINIMUM%v
        CALL setderiv(MDY,MINIMUM)
      END DO
      DO IX = 1, 20, 1
        DO IY = 1, 20, 1
          IF (DEPTH(IX,IY)%v .LT. MDEP%v) THEN
            MAXIMUM%v = MDEP%v
            CALL setderiv(MAXIMUM,MDEP)
          ELSE
            MAXIMUM%v = DEPTH(IX,IY)%v
            CALL setderiv(MAXIMUM,DEPTH(IX,IY))
          ENDIF
          MDEP%v = MAXIMUM%v
          CALL setderiv(MDEP,MAXIMUM)
        END DO
      END DO
      OpenAD_Symbol_57 = SQRT(MDEP%v*9.81000000000000049738D00)
      OpenAD_Symbol_59 = 9.81000000000000049738D00
      OpenAD_Symbol_58 = (5.0D-01 / OpenAD_Symbol_57)
      WAVESPEED%v = OpenAD_Symbol_57
      OpenAD_Symbol_61 = (WAVESPEED%v*DT%v)
      OpenAD_Symbol_66 = (OpenAD_Symbol_61/MDX%v)
      OpenAD_Symbol_64 = DT%v
      OpenAD_Symbol_65 = WAVESPEED%v
      OpenAD_Symbol_62 = (INT(1 _w2f__i8)/MDX%v)
      OpenAD_Symbol_63 = (-(OpenAD_Symbol_61/(MDX%v*MDX%v)))
      CFLX%v = OpenAD_Symbol_66
      OpenAD_Symbol_67 = (WAVESPEED%v*DT%v)
      OpenAD_Symbol_72 = (OpenAD_Symbol_67/MDY%v)
      OpenAD_Symbol_70 = DT%v
      OpenAD_Symbol_71 = WAVESPEED%v
      OpenAD_Symbol_68 = (INT(1 _w2f__i8)/MDY%v)
      OpenAD_Symbol_69 = (-(OpenAD_Symbol_67/(MDY%v*MDY%v)))
      CFLY%v = OpenAD_Symbol_72
      OpenAD_Symbol_752 = (OpenAD_Symbol_59 * OpenAD_Symbol_58)
      OpenAD_Symbol_754 = (OpenAD_Symbol_752 * OpenAD_Symbol_64)
      OpenAD_Symbol_755 = (OpenAD_Symbol_752 * OpenAD_Symbol_70)
      OpenAD_Symbol_756 = (OpenAD_Symbol_754 * OpenAD_Symbol_62)
      OpenAD_Symbol_757 = (OpenAD_Symbol_65 * OpenAD_Symbol_62)
      OpenAD_Symbol_759 = (OpenAD_Symbol_755 * OpenAD_Symbol_68)
      OpenAD_Symbol_760 = (OpenAD_Symbol_71 * OpenAD_Symbol_68)
      OpenAD_Symbol_761 = OpenAD_Symbol_63
      OpenAD_Symbol_763 = OpenAD_Symbol_69
      CALL setderiv(OpenAD_Symbol_764,MDY)
      CALL setderiv(OpenAD_Symbol_762,MDX)
      CALL setderiv(OpenAD_Symbol_758,DT)
      CALL setderiv(OpenAD_Symbol_753,MDEP)
      CALL sax(OpenAD_Symbol_752,OpenAD_Symbol_753,WAVESPEED)
      CALL sax(OpenAD_Symbol_756,OpenAD_Symbol_753,CFLX)
      CALL saxpy(OpenAD_Symbol_757,OpenAD_Symbol_758,CFLX)
      CALL sax(OpenAD_Symbol_759,OpenAD_Symbol_753,CFLY)
      CALL saxpy(OpenAD_Symbol_760,OpenAD_Symbol_758,CFLY)
      CALL saxpy(OpenAD_Symbol_761,OpenAD_Symbol_762,CFLX)
      CALL saxpy(OpenAD_Symbol_763,OpenAD_Symbol_764,CFLY)
      WRITE(*, *) 'rough check of CLF criterion:'
      IF ((CFLX%v .GE. 1.0D00) .OR. (CFLY%v .GE. 1.0D00)) THEN
        WRITE(*, *) 'warning: CLF criterion not met'
        WRITE(*,*)'sqrt(g*max(depth))*dt/min(dx) = ',CFLX%v
        WRITE(*,*)'sqrt(g*max(depth))*dt/min(dy) = ',CFLY%v
      ELSE
        WRITE(*, *) 'OK'
      ENDIF
      RETURN
      END SUBROUTINE

      SUBROUTINE read_extended_field(NCDATAFILE, FNAME, FIELD)
      use w2f__types
      use active_module
      use size
      IMPLICIT NONE
C
C     **** Parameters and Result ****
C
      CHARACTER(80) NCDATAFILE
      CHARACTER(80) FNAME
      type(active) :: FIELD(0 : 21, 0 : 21)
C
C     **** Local Variables and functions ****
C
      type(active) :: F_IN(1 : 20, 1 : 20)
      INTEGER(w2f__i4) IX
      INTEGER(w2f__i4) IY
      INTEGER(w2f__i4) MYNX
      INTEGER(w2f__i4) MYNY
      EXTERNAL read_field_netcdf
C
C     **** statements ****
C
      MYNX = 20
      MYNY = 20
      DO IX = 1, 20, 1
        DO IY = 1, 20, 1
          F_IN(INT(IX),INT(IY))%v = 0.0D00
          CALL zero_deriv(F_IN(INT(IX),INT(IY)))
        END DO
      END DO
      CALL read_field_netcdf(NCDATAFILE,FNAME,MYNX,MYNY,F_IN)
      DO IX = 1, 20, 1
        DO IY = 1, 20, 1
          FIELD(INT(IX),INT(IY))%v = F_IN(IX,IY)%v
          CALL setderiv(FIELD(IX,IY),F_IN(IX,IY))
        END DO
      END DO
      RETURN
      END SUBROUTINE

      SUBROUTINE read_field(NCDATAFILE, START_TIME, FNAME, FIELD)
      use w2f__types
      use active_module
      use size
      IMPLICIT NONE
C
C     **** Parameters and Result ****
C
      CHARACTER(80) NCDATAFILE
      type(active) :: START_TIME
      CHARACTER(80) FNAME
      type(active) :: FIELD(1 : 20, 1 : 20)
C
C     **** Local Variables and functions ****
C
      type(active) :: F_IN(1 : 20, 1 : 20)
      INTEGER(w2f__i4) IX
      INTEGER(w2f__i4) IY
      INTEGER(w2f__i4) MYNX
      SAVE MYNX
      INTEGER(w2f__i4) MYNY
      SAVE MYNY
      EXTERNAL read_field_netcdf
      EXTERNAL read_snap_netcdf
C
C     **** Initializers ****
C
      DATA MYNX / 20 /
      DATA MYNY / 20 /
C
C     **** statements ****
C
      DO IX = 1, 20, 1
        DO IY = 1, 20, 1
          F_IN(INT(IX),INT(IY))%v = 0.0D00
          CALL zero_deriv(F_IN(INT(IX),INT(IY)))
        END DO
      END DO
      IF (START_TIME%v .LE. 0.0D00) THEN
        CALL read_field_netcdf(NCDATAFILE,FNAME,MYNX,MYNY,F_IN)
      ELSE
        CALL read_snap_netcdf(NCDATAFILE,START_TIME,MYNX,MYNY,FNAME,F_IN
     +)
      ENDIF
      DO IX = 1, 20, 1
        DO IY = 1, 20, 1
          FIELD(INT(IX),INT(IY))%v = F_IN(IX,IY)%v
          CALL setderiv(FIELD(IX,IY),F_IN(IX,IY))
        END DO
      END DO
      RETURN
      END SUBROUTINE

      SUBROUTINE boundary_conditions(NX, NY, FIELD, XPERIODIC,
     >  YPERIODIC)
      use w2f__types
      use active_module
      IMPLICIT NONE
C
C     **** Parameters and Result ****
C
      INTEGER(w2f__i4) NX
      INTEGER(w2f__i4) NY
      type(active) :: FIELD(0 : INT((NX + 1)), 0 : INT((NY + 1)) )
      LOGICAL(w2f__i4) XPERIODIC
      LOGICAL(w2f__i4) YPERIODIC
C
C     **** Local Variables and functions ****
C
      INTEGER(w2f__i8) t__40
      INTEGER(w2f__i8) t__43
      INTEGER(w2f__i8) t__41
      INTEGER(w2f__i8) t__46
      INTEGER(w2f__i4) IX
      INTEGER(w2f__i4) IY
      INTEGER(w2f__i8) t__42
      INTEGER(w2f__i8) t__44
      INTEGER(w2f__i8) t__45
      INTEGER(w2f__i8) t__47
C
C     **** Temporary variables ****
C
      INTEGER(w2f__i4) doloop_ub
      INTEGER(w2f__i4) doloop_ub0
      INTEGER(w2f__i4) doloop_ub1
      INTEGER(w2f__i4) doloop_ub2
C
C     **** statements ****
C
      t__40 = INT(NX + 1)
      t__41 = INT(NY + 1)
      t__42 = t__40 + 1_w2f__i8
      t__43 = MAX(t__42, 0_w2f__i8)
      t__44 = t__43
      t__45 = t__41 + 1_w2f__i8
      t__46 = MAX(t__45, 0_w2f__i8)
      t__47 = t__43 * t__46
      IF(XPERIODIC) THEN
        doloop_ub = NY + 1
        DO IY = 0, doloop_ub, 1
          FIELD(0,INT(IY))%v = FIELD(NX,IY)%v
          CALL setderiv(FIELD(0,IY),FIELD(NX,IY))
          FIELD(INT(NX+1),INT(IY))%v = FIELD(1,IY)%v
          CALL setderiv(FIELD(NX+1,IY),FIELD(1,IY))
        END DO
      ELSE
        doloop_ub0 = NY + 1
        DO IY = 0, doloop_ub0, 1
          FIELD(0,INT(IY))%v = 0.0D00
          FIELD(INT(NX+1),INT(IY))%v = 0.0D00
          CALL zero_deriv(FIELD(0,INT(IY)))
          CALL zero_deriv(FIELD(INT(NX+1),INT(IY)))
        END DO
      ENDIF
      IF(YPERIODIC) THEN
        doloop_ub1 = NX + 1
        DO IX = 0, doloop_ub1, 1
          FIELD(INT(IX),0)%v = FIELD(IX,NY)%v
          CALL setderiv(FIELD(IX,0),FIELD(IX,NY))
          FIELD(INT(IX),INT(NY+1))%v = FIELD(IX,1)%v
          CALL setderiv(FIELD(IX,NY+1),FIELD(IX,1))
        END DO
      ELSE
        doloop_ub2 = NX + 1
        DO IX = 0, doloop_ub2, 1
          FIELD(INT(IX),0)%v = 0.0D00
          FIELD(INT(IX),INT(NY+1))%v = 0.0D00
          CALL zero_deriv(FIELD(INT(IX),0))
          CALL zero_deriv(FIELD(INT(IX),INT(NY+1)))
        END DO
      ENDIF
      IF(XPERIODIC .AND. YPERIODIC) THEN
        WRITE(*, *) 'boundary_conditions: ',
     >  'make sure that the corners are handled correctly'
      ENDIF
      RETURN
      END SUBROUTINE

      SUBROUTINE ini_io()
      use w2f__types
      use active_module
      use size
      use parms
      use pfields
      use weights
      IMPLICIT NONE
C
C     **** Local Variables and functions ****
C
      EXTERNAL add_coordinates_netcdf
      EXTERNAL add_gatta_netcdf
      EXTERNAL add_gatti_netcdf
      EXTERNAL add_gattr_netcdf
      EXTERNAL add_recvar_netcdf
      EXTERNAL create_netcdf
      INTEGER(w2f__i4) IX
      INTEGER(w2f__i4) IY
      type(active) :: MYEARTH
      INTEGER(w2f__i4) MYNX
      INTEGER(w2f__i4) MYNY
      CHARACTER(80) STR1
      CHARACTER(80) STR2
      CHARACTER(80) STR3
      CHARACTER(80) STR4
      type(active) :: XOUT(1 : 20)
      type(active) :: YOUT(1 : 20)
C
C     **** statements ****
C
      MYNX = 20
      MYNY = 20
      MYEARTH%v = 6.371D+06
      CALL zero_deriv(MYEARTH)
      IF(FULLIO) THEN
        WRITE(*, *) 'initializing I/O'
      ENDIF
      CALL create_netcdf(FOUTNAME, RUNNAME, MYNX, MYNY)
      IF(SPHERICAL) THEN
        STR1 = 'grid_type'
        STR2 = 'spherical'
        STR3 = 'earth_radius'
        STR4 = 'Omega'
        CALL add_gatta_netcdf(FOUTNAME, STR1, STR2)
        CALL add_gattr_netcdf(FOUTNAME,STR3,MYEARTH)
        CALL add_gattr_netcdf(FOUTNAME,STR4,OM)
      ELSE
        IF(CARTESIAN) THEN
          STR1 = 'grid_type'
          STR2 = 'cartesian'
          STR3 = 'f0'
          STR4 = 'beta'
          CALL add_gatta_netcdf(FOUTNAME, STR1, STR2)
          CALL add_gattr_netcdf(FOUTNAME,STR3,F0)
          CALL add_gattr_netcdf(FOUTNAME,STR4,BETA)
        ENDIF
      ENDIF
      STR1 = 'r_ini'
      STR2 = 'time_step'
      CALL add_gattr_netcdf(FOUTNAME,STR1,RINI)
      CALL add_gattr_netcdf(FOUTNAME,STR2,DT)
      IF(XPERIODIC) THEN
        STR1 = 'zonal_boundary_conditions'
        STR2 = 'periodic'
        CALL add_gatta_netcdf(FOUTNAME, STR1, STR2)
      ENDIF
      IF(YPERIODIC) THEN
        STR1 = 'meridional_boundary_conditions'
        STR2 = 'periodic'
        CALL add_gatta_netcdf(FOUTNAME, STR1, STR2)
      ENDIF
      STR1 = 'data_files'
      STR2 = NCDATAFILE // ' ' // DEPTHFILE // ' ' // FORCINGFILE //
     >  ' ' // UINIFILE // ' ' // VINIFILE // ' ' // ETAINIFILE
      CALL add_gatta_netcdf(FOUTNAME, STR1, STR2)
      IF (START_TIME%v .ne. 0.0D00) THEN
        STR1 = 'restart_file'
        CALL add_gatta_netcdf(FOUTNAME, STR1, NCRESTARTFILE)
      ENDIF
      STR1 = 'ntspinup'
      STR2 = 'wf_depth'
      STR3 = 'wf_eta'
      STR4 = 'wf_u'
      CALL add_gatti_netcdf(FOUTNAME, STR1, NTSPINUP)
      CALL add_gattr_netcdf(FOUTNAME,STR2,WF_DEPTH)
      CALL add_gattr_netcdf(FOUTNAME,STR3,WF_ETA)
      CALL add_gattr_netcdf(FOUTNAME,STR4,WF_U)
      STR1 = 'wf_v'
      STR2 = 'wf_lapldepth'
      STR3 = 'wf_graddepth'
      STR4 = 'wf_zonal_transport'
      CALL add_gattr_netcdf(FOUTNAME,STR1,WF_V)
      CALL add_gattr_netcdf(FOUTNAME,STR2,WF_LAPLDEPTH)
      CALL add_gattr_netcdf(FOUTNAME,STR3,WF_GRADDEPTH)
      CALL add_gattr_netcdf(FOUTNAME,STR4,WF_ZONAL_TRANSPORT)
      DO IX = 1, 20, 1
        XOUT(INT(IX))%v = X(IX)%v
        CALL setderiv(XOUT(IX),X(IX))
      END DO
      DO IY = 1, 20, 1
        YOUT(INT(IY))%v = Y(IY)%v
        CALL setderiv(YOUT(IY),Y(IY))
      END DO
      IF(SPHERICAL) THEN
        STR1 = 'deg'
        CALL add_coordinates_netcdf(FOUTNAME,MYNX,XOUT,MYNY,YOUT,STR1)
      ELSE
        IF(CARTESIAN) THEN
          STR1 = 'meters'
          CALL add_coordinates_netcdf(FOUTNAME,MYNX,XOUT,MYNY,YOUT,STR1)
        ENDIF
      ENDIF
      STR1 = 'U'
      STR2 = 'zonal velocity'
      STR3 = 'meters/seconds'
      CALL add_recvar_netcdf(FOUTNAME, STR1, STR2, STR3)
      STR1 = 'V'
      STR2 = 'meridional velocity'
      CALL add_recvar_netcdf(FOUTNAME, STR1, STR2, STR3)
      STR1 = 'ETA'
      STR2 = 'sea-surface elevation'
      STR3 = 'meters'
      CALL add_recvar_netcdf(FOUTNAME, STR1, STR2, STR3)
      RETURN
      END SUBROUTINE

      SUBROUTINE state_io(TIME, NIO)
      use w2f__types
      use active_module
      use size
      use parms
      use pfields
      use vars
      IMPLICIT NONE
C
C     **** Global Variables ****
C
      REAL(w2f__8) OpenAD_Symbol_164
      REAL(w2f__8) OpenAD_Symbol_166
      REAL(w2f__8) OpenAD_Symbol_168
      REAL(w2f__8) OpenAD_Symbol_845
      type(active) :: OpenAD_Symbol_850
      type(active) :: OpenAD_Symbol_846
      REAL(w2f__8) OpenAD_Symbol_847
      type(active) :: OpenAD_Symbol_848
      REAL(w2f__8) OpenAD_Symbol_849
C
C     **** Parameters and Result ****
C
      type(active) :: TIME
      INTEGER(w2f__i4) NIO
C
C     **** Local Variables and functions ****
C
      type(active) :: ETAOUT(1 : 20, 1 : 20)
      INTEGER(w2f__i4) IX
      INTEGER(w2f__i4) IY
      INTEGER(w2f__i4) MYNX
      INTEGER(w2f__i4) MYNY
      CHARACTER(80) STR1
      CHARACTER(80) STR2
      type(active) :: UOUT(1 : 20, 1 : 20)
      type(active) :: VOUT(1 : 20, 1 : 20)
      EXTERNAL write_state_netcdf
C
C     **** statements ****
C
      MYNX = 20
      MYNY = 20
      DO IX = 1, 20, 1
        DO IY = 1, 20, 1
          UOUT(INT(IX),INT(IY))%v = (U(IX,IY)%v+REAL(INT(INT(UMASK(IX,IY
     +)%v))+INT((-1 _w2f__i8)))*9.9D+01)
          OpenAD_Symbol_164 = 1_w2f__i8
          OpenAD_Symbol_845 = OpenAD_Symbol_164
          CALL setderiv(OpenAD_Symbol_846,U(IX,IY))
          CALL sax(OpenAD_Symbol_845,OpenAD_Symbol_846,UOUT(IX,IY))
          VOUT(INT(IX),INT(IY))%v = (V(IX,IY)%v+REAL(INT(INT(VMASK(IX,IY
     +)%v))+INT((-1 _w2f__i8)))*9.9D+01)
          OpenAD_Symbol_166 = 1_w2f__i8
          OpenAD_Symbol_847 = OpenAD_Symbol_166
          CALL setderiv(OpenAD_Symbol_848,V(IX,IY))
          CALL sax(OpenAD_Symbol_847,OpenAD_Symbol_848,VOUT(IX,IY))
          ETAOUT(INT(IX),INT(IY))%v = (ETA(IX,IY)%v+REAL(INT(INT(ETAMASK
     +(IX,IY)%v))+INT((-1 _w2f__i8)))*9.9D+01)
          OpenAD_Symbol_168 = 1_w2f__i8
          OpenAD_Symbol_849 = OpenAD_Symbol_168
          CALL setderiv(OpenAD_Symbol_850,ETA(IX,IY))
          CALL sax(OpenAD_Symbol_849,OpenAD_Symbol_850,ETAOUT(IX,IY))
        END DO
      END DO
      STR1 = 'TIME'
      STR2 = 'U'
      CALL write_state_netcdf(FOUTNAME,MYNX,MYNY,NIO,STR1,TIME)
      CALL write_state_netcdf(FOUTNAME,MYNX,MYNY,NIO,STR2,UOUT)
      STR1 = 'V'
      STR2 = 'ETA'
      CALL write_state_netcdf(FOUTNAME,MYNX,MYNY,NIO,STR1,VOUT)
      CALL write_state_netcdf(FOUTNAME,MYNX,MYNY,NIO,STR2,ETAOUT)
      RETURN
      END SUBROUTINE

      SUBROUTINE pfields_io()
      use w2f__types
      use active_module
      use size
      use parms
      use pfields
      use force
      IMPLICIT NONE
C
C     **** Local Variables and functions ****
C
      EXTERNAL add_pfield_netcdf
      type(active) :: AUX(1 : 20, 1 : 20)
      INTEGER(w2f__i4) IX
      INTEGER(w2f__i4) IY
      INTEGER(w2f__i4) MYNX
      INTEGER(w2f__i4) MYNY
      CHARACTER(80) STR1
      CHARACTER(80) STR2
      CHARACTER(80) STR3
C
C     **** statements ****
C
      MYNX = 20
      MYNY = 20
      DO IX = 1, 20, 1
        DO IY = 1, 20, 1
          AUX(INT(IX),INT(IY))%v = DEPTH(IX,IY)%v
          CALL setderiv(AUX(IX,IY),DEPTH(IX,IY))
        END DO
      END DO
      STR1 = 'depth'
      STR2 = 'water depth'
      STR3 = 'meters'
      CALL add_pfield_netcdf(FOUTNAME,MYNX,MYNY,AUX,STR1,STR2,STR3)
      DO IX = 1, 20, 1
        DO IY = 1, 20, 1
          AUX(INT(IX),INT(IY))%v = UFORCE(IX,IY)%v
          CALL setderiv(AUX(IX,IY),UFORCE(IX,IY))
        END DO
      END DO
      STR1 = 'uforce'
      STR2 = 'zonal forcing'
      STR3 = 'forcing units'
      CALL add_pfield_netcdf(FOUTNAME,MYNX,MYNY,AUX,STR1,STR2,STR3)
      DO IX = 1, 20, 1
        DO IY = 1, 20, 1
          AUX(INT(IX),INT(IY))%v = VFORCE(IX,IY)%v
          CALL setderiv(AUX(IX,IY),VFORCE(IX,IY))
        END DO
      END DO
      STR1 = 'vforce'
      STR2 = 'meridional forcing'
      STR3 = 'forcing units'
      CALL add_pfield_netcdf(FOUTNAME,MYNX,MYNY,AUX,STR1,STR2,STR3)
      DO IX = 1, 20, 1
        DO IY = 1, 20, 1
          AUX(INT(IX),INT(IY))%v = FRICT(IX,IY)%v
          CALL setderiv(AUX(IX,IY),FRICT(IX,IY))
        END DO
      END DO
      STR1 = 'frict'
      STR2 = 'linear bottom friction coefficient'
      STR3 = '1/seconds'
      CALL add_pfield_netcdf(FOUTNAME,MYNX,MYNY,AUX,STR1,STR2,STR3)
      RETURN
      END SUBROUTINE

      SUBROUTINE save_gradient_io(N, ADXC, GNAME)
      use w2f__types
      use active_module
      use size
      use parms
      use pfields
      IMPLICIT NONE
C
C     **** Parameters and Result ****
C
      INTEGER(w2f__i4) N
      type(active) :: ADXC(1 : N)
      CHARACTER(80) GNAME
C
C     **** Local Variables and functions ****
C
      INTEGER(w2f__i8) t__54
      INTEGER(w2f__i8) t__57
      EXTERNAL add_pfield_netcdf
      type(active) :: GRAD(1 : 20, 1 : 20)
      EXTERNAL map_gradient
      INTEGER(w2f__i4) MYNX
      INTEGER(w2f__i4) MYNY
      CHARACTER(80) STR1
      CHARACTER(80) STR2
C
C     **** statements ****
C
      t__54 = N
      t__57 = MAX(t__54, 0_w2f__i8)
      MYNX = 20
      MYNY = 20
      CALL map_gradient(N,ADXC,GRAD)
      STR1 = 'gradient of cost function with respect to depth'
      STR2 = 'cost function units/m'
      CALL add_pfield_netcdf(FOUTNAME,MYNX,MYNY,GRAD,GNAME,STR1,STR2)
      SUPPRESSIO = .TRUE.
      RETURN
      END SUBROUTINE

      SUBROUTINE save_depth_io(N, XC, DNAME)
      use w2f__types
      use active_module
      use size
      use parms
      use pfields
      IMPLICIT NONE
C
C     **** Parameters and Result ****
C
      INTEGER(w2f__i4) N
      type(active) :: XC(1 : N)
      CHARACTER(80) DNAME
C
C     **** Local Variables and functions ****
C
      INTEGER(w2f__i8) t__58
      INTEGER(w2f__i8) t__61
      EXTERNAL add_pfield_netcdf
      type(active) :: AUX(1 : 20, 1 : 20)
      INTEGER(w2f__i4) IX
      INTEGER(w2f__i4) IY
      EXTERNAL map_from_control_vector
      INTEGER(w2f__i4) MYNX
      INTEGER(w2f__i4) MYNY
      CHARACTER(80) STR1
      CHARACTER(80) STR2
C
C     **** statements ****
C
      t__58 = N
      t__61 = MAX(t__58, 0_w2f__i8)
      MYNX = 20
      MYNY = 20
      CALL map_from_control_vector(N,XC)
      DO IX = 1, 20, 1
        DO IY = 1, 20, 1
          AUX(INT(IX),INT(IY))%v = DEPTH(IX,IY)%v
          CALL setderiv(AUX(IX,IY),DEPTH(IX,IY))
        END DO
      END DO
      STR1 = 'water depth after optimization'
      STR2 = 'm'
      CALL add_pfield_netcdf(FOUTNAME,MYNX,MYNY,AUX,DNAME,STR1,STR2)
      SUPPRESSIO = .TRUE.
      RETURN
      END SUBROUTINE

      SUBROUTINE inimini_io()
      use w2f__types
      use active_module
      IMPLICIT NONE
C
C     **** statements ****
C
      RETURN
      END SUBROUTINE

      SUBROUTINE save_weights_io()
      use w2f__types
      use active_module
      use size
      use parms
      use weights
      IMPLICIT NONE
C
C     **** Local Variables and functions ****
C
      EXTERNAL add_gattr_netcdf
      CHARACTER(80) STR1
C
C     **** statements ****
C
      STR1 = 'wf_depth'
      CALL add_gattr_netcdf(FOUTNAME,STR1,WF_DEPTH)
      STR1 = 'wf_eta'
      CALL add_gattr_netcdf(FOUTNAME,STR1,WF_ETA)
      STR1 = 'wf_zonal_transport'
      CALL add_gattr_netcdf(FOUTNAME,STR1,WF_ZONAL_TRANSPORT)
      RETURN
      END SUBROUTINE

      SUBROUTINE create_netcdf(FNAME, TNAME, NX, NY)
      use w2f__types
      use active_module
      IMPLICIT NONE
C
C     **** Parameters and Result ****
C
      CHARACTER(80) FNAME
      CHARACTER(80) TNAME
      INTEGER(w2f__i4) NX
      INTEGER(w2f__i4) NY
C
C     **** Local Variables and functions ****
C
      INTEGER(w2f__i4) DID
      INTEGER(w2f__i4) ERRMSG
      INTEGER(w2f__i4) FID
      INTEGER(w2f__i4) FILBYTE
      PARAMETER ( FILBYTE = -127)
      INTEGER(w2f__i4) FILCHAR
      PARAMETER ( FILCHAR = 0)
      REAL(w2f__8) FILDOUB
      PARAMETER ( FILDOUB = 9.969209968386869d+36)
      REAL(w2f__4) FILFLOAT
      PARAMETER ( FILFLOAT = 9.969210d+36)
      INTEGER(w2f__i4) FILLONG
      PARAMETER ( FILLONG = -2147483647)
      INTEGER(w2f__i4) FILSHORT
      PARAMETER ( FILSHORT = -32767)
      EXTERNAL handle_err
      EXTERNAL lastchar
      INTEGER(w2f__i4) lastchar
      INTEGER(w2f__i4) LCHAR
      INTEGER(w2f__i4) MAXNCATT
      PARAMETER ( MAXNCATT = 2000)
      INTEGER(w2f__i4) MAXNCDIM
      PARAMETER ( MAXNCDIM = 100)
      INTEGER(w2f__i4) MAXNCNAM
      PARAMETER ( MAXNCNAM = 128)
      INTEGER(w2f__i4) MAXNCOP
      PARAMETER ( MAXNCOP = 32)
      INTEGER(w2f__i4) MAXNCVAR
      PARAMETER ( MAXNCVAR = 2000)
      INTEGER(w2f__i4) MAXVDIMS
      PARAMETER ( MAXVDIMS = 100)
      INTEGER(w2f__i4) NCBYTE
      PARAMETER ( NCBYTE = 1)
      INTEGER(w2f__i4) NCCHAR
      PARAMETER ( NCCHAR = 2)
      INTEGER(w2f__i4) NCCLOB
      PARAMETER ( NCCLOB = 0)
      INTEGER(w2f__i4) NCCREAT
      PARAMETER ( NCCREAT = 2)
      INTEGER(w2f__i4) NCDOUBLE
      PARAMETER ( NCDOUBLE = 6)
      INTEGER(w2f__i4) NCEBADD
      PARAMETER ( NCEBADD = -46)
      INTEGER(w2f__i4) NCEBADID
      PARAMETER ( NCEBADID = -33)
      INTEGER(w2f__i4) NCEBADTY
      PARAMETER ( NCEBADTY = -45)
      INTEGER(w2f__i4) NCECOORD
      PARAMETER ( NCECOORD = -40)
      INTEGER(w2f__i4) NCEEXIST
      PARAMETER ( NCEEXIST = -35)
      INTEGER(w2f__i4) NCEGLOB
      PARAMETER ( NCEGLOB = -50)
      INTEGER(w2f__i4) NCEINDEF
      PARAMETER ( NCEINDEF = -39)
      INTEGER(w2f__i4) NCEINVAL
      PARAMETER ( NCEINVAL = -36)
      INTEGER(w2f__i4) NCEMAXAT
      PARAMETER ( NCEMAXAT = -44)
      INTEGER(w2f__i4) NCEMAXDS
      PARAMETER ( NCEMAXDS = -41)
      INTEGER(w2f__i4) NCEMAXVS
      PARAMETER ( NCEMAXVS = -48)
      INTEGER(w2f__i4) NCENAME
      PARAMETER ( NCENAME = -42)
      INTEGER(w2f__i4) NCENFILE
      PARAMETER ( NCENFILE = -31)
      INTEGER(w2f__i4) NCENOATT
      PARAMETER ( NCENOATT = -43)
      INTEGER(w2f__i4) NCENOTIN
      PARAMETER ( NCENOTIN = -38)
      INTEGER(w2f__i4) NCENOTNC
      PARAMETER ( NCENOTNC = -51)
      INTEGER(w2f__i4) NCENOTVR
      PARAMETER ( NCENOTVR = -49)
      INTEGER(w2f__i4) NCENTOOL
      PARAMETER ( NCENTOOL = -53)
      INTEGER(w2f__i4) NCEPERM
      PARAMETER ( NCEPERM = -37)
      INTEGER(w2f__i4) NCESTS
      PARAMETER ( NCESTS = -52)
      INTEGER(w2f__i4) NCEUNLIM
      PARAMETER ( NCEUNLIM = -47)
      INTEGER(w2f__i4) NCEXCL
      PARAMETER ( NCEXCL = 4)
      INTEGER(w2f__i4) NCFATAL
      PARAMETER ( NCFATAL = 1)
      INTEGER(w2f__i4) NCFILL
      PARAMETER ( NCFILL = 0)
      INTEGER(w2f__i4) NCFLOAT
      PARAMETER ( NCFLOAT = 5)
      INTEGER(w2f__i4) NCFOOBAR
      PARAMETER ( NCFOOBAR = 32)
      INTEGER(w2f__i4) NCGLOBAL
      PARAMETER ( NCGLOBAL = 0)
      INTEGER(w2f__i4) NCHDIRTY
      PARAMETER ( NCHDIRTY = 128)
      INTEGER(w2f__i4) NCHSYNC
      PARAMETER ( NCHSYNC = 32)
      INTEGER(w2f__i4) NCINDEF
      PARAMETER ( NCINDEF = 8)
      INTEGER(w2f__i4) NCLINK
      PARAMETER ( NCLINK = 32768)
      INTEGER(w2f__i4) NCLONG
      PARAMETER ( NCLONG = 4)
      INTEGER(w2f__i4) NCNDIRTY
      PARAMETER ( NCNDIRTY = 64)
      INTEGER(w2f__i4) NCNOCLOB
      PARAMETER ( NCNOCLOB = 4)
      INTEGER(w2f__i4) NCNOERR
      PARAMETER ( NCNOERR = 0)
      INTEGER(w2f__i4) NCNOFILL
      PARAMETER ( NCNOFILL = 256)
      INTEGER(w2f__i4) NCNOWRIT
      PARAMETER ( NCNOWRIT = 0)
      INTEGER(w2f__i4) NCNSYNC
      PARAMETER ( NCNSYNC = 16)
      INTEGER(w2f__i4) NCRDWR
      PARAMETER ( NCRDWR = 1)
      INTEGER(w2f__i4) NCSHORT
      PARAMETER ( NCSHORT = 3)
      INTEGER(w2f__i4) NCSYSERR
      PARAMETER ( NCSYSERR = -31)
      INTEGER(w2f__i4) NCUNLIM
      PARAMETER ( NCUNLIM = 0)
      INTEGER(w2f__i4) NCVERBOS
      PARAMETER ( NCVERBOS = 2)
      INTEGER(w2f__i4) NCWRITE
      PARAMETER ( NCWRITE = 1)
      INTEGER(w2f__i4) NF_ALIGN_CHUNK
      PARAMETER ( NF_ALIGN_CHUNK = -1)
      INTEGER(w2f__i4) NF_BYTE
      PARAMETER ( NF_BYTE = 1)
      INTEGER(w2f__i4) NF_CHAR
      PARAMETER ( NF_CHAR = 2)
      INTEGER(w2f__i4) NF_CLOBBER
      PARAMETER ( NF_CLOBBER = 0)
      EXTERNAL nf_close
      INTEGER(w2f__i4) nf_close
      EXTERNAL nf_create
      INTEGER(w2f__i4) nf_create
      EXTERNAL nf_def_dim
      INTEGER(w2f__i4) nf_def_dim
      INTEGER(w2f__i4) NF_DOUBLE
      PARAMETER ( NF_DOUBLE = 6)
      INTEGER(w2f__i4) NF_EBADDIM
      PARAMETER ( NF_EBADDIM = -46)
      INTEGER(w2f__i4) NF_EBADID
      PARAMETER ( NF_EBADID = -33)
      INTEGER(w2f__i4) NF_EBADNAME
      PARAMETER ( NF_EBADNAME = -59)
      INTEGER(w2f__i4) NF_EBADTYPE
      PARAMETER ( NF_EBADTYPE = -45)
      INTEGER(w2f__i4) NF_ECHAR
      PARAMETER ( NF_ECHAR = -56)
      INTEGER(w2f__i4) NF_EEDGE
      PARAMETER ( NF_EEDGE = -57)
      INTEGER(w2f__i4) NF_EEXIST
      PARAMETER ( NF_EEXIST = -35)
      INTEGER(w2f__i4) NF_EGLOBAL
      PARAMETER ( NF_EGLOBAL = -50)
      INTEGER(w2f__i4) NF_EINDEFINE
      PARAMETER ( NF_EINDEFINE = -39)
      INTEGER(w2f__i4) NF_EINVAL
      PARAMETER ( NF_EINVAL = -36)
      INTEGER(w2f__i4) NF_EINVALCOORDS
      PARAMETER ( NF_EINVALCOORDS = -40)
      INTEGER(w2f__i4) NF_EMAXATTS
      PARAMETER ( NF_EMAXATTS = -44)
      INTEGER(w2f__i4) NF_EMAXDIMS
      PARAMETER ( NF_EMAXDIMS = -41)
      INTEGER(w2f__i4) NF_EMAXNAME
      PARAMETER ( NF_EMAXNAME = -53)
      INTEGER(w2f__i4) NF_EMAXVARS
      PARAMETER ( NF_EMAXVARS = -48)
      INTEGER(w2f__i4) NF_ENAMEINUSE
      PARAMETER ( NF_ENAMEINUSE = -42)
      EXTERNAL nf_enddef
      INTEGER(w2f__i4) nf_enddef
      INTEGER(w2f__i4) NF_ENOMEM
      PARAMETER ( NF_ENOMEM = -61)
      INTEGER(w2f__i4) NF_ENORECVARS
      PARAMETER ( NF_ENORECVARS = -55)
      INTEGER(w2f__i4) NF_ENOTATT
      PARAMETER ( NF_ENOTATT = -43)
      INTEGER(w2f__i4) NF_ENOTINDEFINE
      PARAMETER ( NF_ENOTINDEFINE = -38)
      INTEGER(w2f__i4) NF_ENOTNC
      PARAMETER ( NF_ENOTNC = -51)
      INTEGER(w2f__i4) NF_ENOTVAR
      PARAMETER ( NF_ENOTVAR = -49)
      INTEGER(w2f__i4) NF_EPERM
      PARAMETER ( NF_EPERM = -37)
      INTEGER(w2f__i4) NF_ERANGE
      PARAMETER ( NF_ERANGE = -60)
      INTEGER(w2f__i4) NF_ESTRIDE
      PARAMETER ( NF_ESTRIDE = -58)
      INTEGER(w2f__i4) NF_ESTS
      PARAMETER ( NF_ESTS = -52)
      INTEGER(w2f__i4) NF_EUNLIMIT
      PARAMETER ( NF_EUNLIMIT = -54)
      INTEGER(w2f__i4) NF_EUNLIMPOS
      PARAMETER ( NF_EUNLIMPOS = -47)
      INTEGER(w2f__i4) NF_FATAL
      PARAMETER ( NF_FATAL = 1)
      INTEGER(w2f__i4) NF_FILL
      PARAMETER ( NF_FILL = 0)
      INTEGER(w2f__i4) NF_FILL_BYTE
      PARAMETER ( NF_FILL_BYTE = -127)
      INTEGER(w2f__i4) NF_FILL_CHAR
      PARAMETER ( NF_FILL_CHAR = 0)
      REAL(w2f__8) NF_FILL_DOUBLE
      PARAMETER ( NF_FILL_DOUBLE = 9.969209968386869d+36)
      REAL(w2f__4) NF_FILL_FLOAT
      PARAMETER ( NF_FILL_FLOAT = 9.969210d+36)
      INTEGER(w2f__i4) NF_FILL_INT
      PARAMETER ( NF_FILL_INT = -2147483647)
      INTEGER(w2f__i4) NF_FILL_INT1
      PARAMETER ( NF_FILL_INT1 = -127)
      INTEGER(w2f__i4) NF_FILL_INT2
      PARAMETER ( NF_FILL_INT2 = -32767)
      REAL(w2f__4) NF_FILL_REAL
      PARAMETER ( NF_FILL_REAL = 9.969210d+36)
      INTEGER(w2f__i4) NF_FILL_SHORT
      PARAMETER ( NF_FILL_SHORT = -32767)
      INTEGER(w2f__i4) NF_FLOAT
      PARAMETER ( NF_FLOAT = 5)
      INTEGER(w2f__i4) NF_GLOBAL
      PARAMETER ( NF_GLOBAL = 0)
      INTEGER(w2f__i4) NF_INT
      PARAMETER ( NF_INT = 4)
      INTEGER(w2f__i4) NF_INT1
      PARAMETER ( NF_INT1 = 1)
      INTEGER(w2f__i4) NF_INT2
      PARAMETER ( NF_INT2 = 3)
      INTEGER(w2f__i4) NF_LOCK
      PARAMETER ( NF_LOCK = 1024)
      INTEGER(w2f__i4) NF_MAX_ATTRS
      PARAMETER ( NF_MAX_ATTRS = 4096)
      INTEGER(w2f__i4) NF_MAX_DIMS
      PARAMETER ( NF_MAX_DIMS = 512)
      INTEGER(w2f__i4) NF_MAX_NAME
      PARAMETER ( NF_MAX_NAME = 128)
      INTEGER(w2f__i4) NF_MAX_VARS
      PARAMETER ( NF_MAX_VARS = 4096)
      INTEGER(w2f__i4) NF_MAX_VAR_DIMS
      PARAMETER ( NF_MAX_VAR_DIMS = 512)
      INTEGER(w2f__i4) NF_NOCLOBBER
      PARAMETER ( NF_NOCLOBBER = 4)
      INTEGER(w2f__i4) NF_NOERR
      PARAMETER ( NF_NOERR = 0)
      INTEGER(w2f__i4) NF_NOFILL
      PARAMETER ( NF_NOFILL = 256)
      INTEGER(w2f__i4) NF_NOWRITE
      PARAMETER ( NF_NOWRITE = 0)
      EXTERNAL nf_put_att_text
      INTEGER(w2f__i4) nf_put_att_text
      INTEGER(w2f__i4) NF_REAL
      PARAMETER ( NF_REAL = 5)
      INTEGER(w2f__i4) NF_SHARE
      PARAMETER ( NF_SHARE = 2048)
      INTEGER(w2f__i4) NF_SHORT
      PARAMETER ( NF_SHORT = 3)
      INTEGER(w2f__i4) NF_SIZEHINT_DEFAULT
      PARAMETER ( NF_SIZEHINT_DEFAULT = 0)
      INTEGER(w2f__i4) NF_UNLIMITED
      PARAMETER ( NF_UNLIMITED = 0)
      INTEGER(w2f__i4) NF_VERBOSE
      PARAMETER ( NF_VERBOSE = 2)
      INTEGER(w2f__i4) NF_WRITE
      PARAMETER ( NF_WRITE = 1)
      CHARACTER(80) STR1
      CHARACTER(80) STR2
C
C     **** statements ****
C
      ERRMSG = nf_create(FNAME, (0), FID)
      STR1 = 'nf_create'
      CALL handle_err(ERRMSG, STR1)
      LCHAR = lastchar(TNAME)
      STR1 = 'title'
      ERRMSG = nf_put_att_text(FID, (0), STR1, LCHAR, TNAME(1_w2f__i8 :
     >  MAX(LCHAR, 0)))
      STR1 = 'nf_put_att_text: title'
      CALL handle_err(ERRMSG, STR1)
      STR1 = 'TIME'
      STR2 = 'nf_def_dim: TIME'
      ERRMSG = nf_def_dim(FID, STR1, (0), DID)
      CALL handle_err(ERRMSG, STR2)
      STR1 = 'X'
      STR2 = 'nf_def_dim: X'
      ERRMSG = nf_def_dim(FID, STR1, NX, DID)
      CALL handle_err(ERRMSG, STR2)
      STR1 = 'Y'
      STR2 = 'nf_def_dim: Y'
      ERRMSG = nf_def_dim(FID, STR1, NY, DID)
      CALL handle_err(ERRMSG, STR2)
      STR1 = 'nf_enddef'
      ERRMSG = nf_enddef(FID)
      CALL handle_err(ERRMSG, STR1)
      STR1 = 'nf_close'
      ERRMSG = nf_close(FID)
      CALL handle_err(ERRMSG, STR1)
      RETURN
      END SUBROUTINE

      SUBROUTINE add_gatta_netcdf(FNAME, ANAME, A)
      use w2f__types
      use active_module
      IMPLICIT NONE
C
C     **** Parameters and Result ****
C
      CHARACTER(80) FNAME
      CHARACTER(80) ANAME
      CHARACTER(80) A
C
C     **** Local Variables and functions ****
C
      INTEGER(w2f__i4) ERRMSG
      INTEGER(w2f__i4) FID
      INTEGER(w2f__i4) FILBYTE
      PARAMETER ( FILBYTE = -127)
      INTEGER(w2f__i4) FILCHAR
      PARAMETER ( FILCHAR = 0)
      REAL(w2f__8) FILDOUB
      PARAMETER ( FILDOUB = 9.969209968386869d+36)
      REAL(w2f__4) FILFLOAT
      PARAMETER ( FILFLOAT = 9.969210d+36)
      INTEGER(w2f__i4) FILLONG
      PARAMETER ( FILLONG = -2147483647)
      INTEGER(w2f__i4) FILSHORT
      PARAMETER ( FILSHORT = -32767)
      EXTERNAL handle_err
      EXTERNAL lastchar
      INTEGER(w2f__i4) lastchar
      INTEGER(w2f__i4) LCHAR
      INTEGER(w2f__i4) MAXNCATT
      PARAMETER ( MAXNCATT = 2000)
      INTEGER(w2f__i4) MAXNCDIM
      PARAMETER ( MAXNCDIM = 100)
      INTEGER(w2f__i4) MAXNCNAM
      PARAMETER ( MAXNCNAM = 128)
      INTEGER(w2f__i4) MAXNCOP
      PARAMETER ( MAXNCOP = 32)
      INTEGER(w2f__i4) MAXNCVAR
      PARAMETER ( MAXNCVAR = 2000)
      INTEGER(w2f__i4) MAXVDIMS
      PARAMETER ( MAXVDIMS = 100)
      INTEGER(w2f__i4) NCBYTE
      PARAMETER ( NCBYTE = 1)
      INTEGER(w2f__i4) NCCHAR
      PARAMETER ( NCCHAR = 2)
      INTEGER(w2f__i4) NCCLOB
      PARAMETER ( NCCLOB = 0)
      INTEGER(w2f__i4) NCCREAT
      PARAMETER ( NCCREAT = 2)
      INTEGER(w2f__i4) NCDOUBLE
      PARAMETER ( NCDOUBLE = 6)
      INTEGER(w2f__i4) NCEBADD
      PARAMETER ( NCEBADD = -46)
      INTEGER(w2f__i4) NCEBADID
      PARAMETER ( NCEBADID = -33)
      INTEGER(w2f__i4) NCEBADTY
      PARAMETER ( NCEBADTY = -45)
      INTEGER(w2f__i4) NCECOORD
      PARAMETER ( NCECOORD = -40)
      INTEGER(w2f__i4) NCEEXIST
      PARAMETER ( NCEEXIST = -35)
      INTEGER(w2f__i4) NCEGLOB
      PARAMETER ( NCEGLOB = -50)
      INTEGER(w2f__i4) NCEINDEF
      PARAMETER ( NCEINDEF = -39)
      INTEGER(w2f__i4) NCEINVAL
      PARAMETER ( NCEINVAL = -36)
      INTEGER(w2f__i4) NCEMAXAT
      PARAMETER ( NCEMAXAT = -44)
      INTEGER(w2f__i4) NCEMAXDS
      PARAMETER ( NCEMAXDS = -41)
      INTEGER(w2f__i4) NCEMAXVS
      PARAMETER ( NCEMAXVS = -48)
      INTEGER(w2f__i4) NCENAME
      PARAMETER ( NCENAME = -42)
      INTEGER(w2f__i4) NCENFILE
      PARAMETER ( NCENFILE = -31)
      INTEGER(w2f__i4) NCENOATT
      PARAMETER ( NCENOATT = -43)
      INTEGER(w2f__i4) NCENOTIN
      PARAMETER ( NCENOTIN = -38)
      INTEGER(w2f__i4) NCENOTNC
      PARAMETER ( NCENOTNC = -51)
      INTEGER(w2f__i4) NCENOTVR
      PARAMETER ( NCENOTVR = -49)
      INTEGER(w2f__i4) NCENTOOL
      PARAMETER ( NCENTOOL = -53)
      INTEGER(w2f__i4) NCEPERM
      PARAMETER ( NCEPERM = -37)
      INTEGER(w2f__i4) NCESTS
      PARAMETER ( NCESTS = -52)
      INTEGER(w2f__i4) NCEUNLIM
      PARAMETER ( NCEUNLIM = -47)
      INTEGER(w2f__i4) NCEXCL
      PARAMETER ( NCEXCL = 4)
      INTEGER(w2f__i4) NCFATAL
      PARAMETER ( NCFATAL = 1)
      INTEGER(w2f__i4) NCFILL
      PARAMETER ( NCFILL = 0)
      INTEGER(w2f__i4) NCFLOAT
      PARAMETER ( NCFLOAT = 5)
      INTEGER(w2f__i4) NCFOOBAR
      PARAMETER ( NCFOOBAR = 32)
      INTEGER(w2f__i4) NCGLOBAL
      PARAMETER ( NCGLOBAL = 0)
      INTEGER(w2f__i4) NCHDIRTY
      PARAMETER ( NCHDIRTY = 128)
      INTEGER(w2f__i4) NCHSYNC
      PARAMETER ( NCHSYNC = 32)
      INTEGER(w2f__i4) NCINDEF
      PARAMETER ( NCINDEF = 8)
      INTEGER(w2f__i4) NCLINK
      PARAMETER ( NCLINK = 32768)
      INTEGER(w2f__i4) NCLONG
      PARAMETER ( NCLONG = 4)
      INTEGER(w2f__i4) NCNDIRTY
      PARAMETER ( NCNDIRTY = 64)
      INTEGER(w2f__i4) NCNOCLOB
      PARAMETER ( NCNOCLOB = 4)
      INTEGER(w2f__i4) NCNOERR
      PARAMETER ( NCNOERR = 0)
      INTEGER(w2f__i4) NCNOFILL
      PARAMETER ( NCNOFILL = 256)
      INTEGER(w2f__i4) NCNOWRIT
      PARAMETER ( NCNOWRIT = 0)
      INTEGER(w2f__i4) NCNSYNC
      PARAMETER ( NCNSYNC = 16)
      INTEGER(w2f__i4) NCRDWR
      PARAMETER ( NCRDWR = 1)
      INTEGER(w2f__i4) NCSHORT
      PARAMETER ( NCSHORT = 3)
      INTEGER(w2f__i4) NCSYSERR
      PARAMETER ( NCSYSERR = -31)
      INTEGER(w2f__i4) NCUNLIM
      PARAMETER ( NCUNLIM = 0)
      INTEGER(w2f__i4) NCVERBOS
      PARAMETER ( NCVERBOS = 2)
      INTEGER(w2f__i4) NCWRITE
      PARAMETER ( NCWRITE = 1)
      INTEGER(w2f__i4) NF_ALIGN_CHUNK
      PARAMETER ( NF_ALIGN_CHUNK = -1)
      INTEGER(w2f__i4) NF_BYTE
      PARAMETER ( NF_BYTE = 1)
      INTEGER(w2f__i4) NF_CHAR
      PARAMETER ( NF_CHAR = 2)
      INTEGER(w2f__i4) NF_CLOBBER
      PARAMETER ( NF_CLOBBER = 0)
      EXTERNAL nf_close
      INTEGER(w2f__i4) nf_close
      INTEGER(w2f__i4) NF_DOUBLE
      PARAMETER ( NF_DOUBLE = 6)
      INTEGER(w2f__i4) NF_EBADDIM
      PARAMETER ( NF_EBADDIM = -46)
      INTEGER(w2f__i4) NF_EBADID
      PARAMETER ( NF_EBADID = -33)
      INTEGER(w2f__i4) NF_EBADNAME
      PARAMETER ( NF_EBADNAME = -59)
      INTEGER(w2f__i4) NF_EBADTYPE
      PARAMETER ( NF_EBADTYPE = -45)
      INTEGER(w2f__i4) NF_ECHAR
      PARAMETER ( NF_ECHAR = -56)
      INTEGER(w2f__i4) NF_EEDGE
      PARAMETER ( NF_EEDGE = -57)
      INTEGER(w2f__i4) NF_EEXIST
      PARAMETER ( NF_EEXIST = -35)
      INTEGER(w2f__i4) NF_EGLOBAL
      PARAMETER ( NF_EGLOBAL = -50)
      INTEGER(w2f__i4) NF_EINDEFINE
      PARAMETER ( NF_EINDEFINE = -39)
      INTEGER(w2f__i4) NF_EINVAL
      PARAMETER ( NF_EINVAL = -36)
      INTEGER(w2f__i4) NF_EINVALCOORDS
      PARAMETER ( NF_EINVALCOORDS = -40)
      INTEGER(w2f__i4) NF_EMAXATTS
      PARAMETER ( NF_EMAXATTS = -44)
      INTEGER(w2f__i4) NF_EMAXDIMS
      PARAMETER ( NF_EMAXDIMS = -41)
      INTEGER(w2f__i4) NF_EMAXNAME
      PARAMETER ( NF_EMAXNAME = -53)
      INTEGER(w2f__i4) NF_EMAXVARS
      PARAMETER ( NF_EMAXVARS = -48)
      INTEGER(w2f__i4) NF_ENAMEINUSE
      PARAMETER ( NF_ENAMEINUSE = -42)
      INTEGER(w2f__i4) NF_ENOMEM
      PARAMETER ( NF_ENOMEM = -61)
      INTEGER(w2f__i4) NF_ENORECVARS
      PARAMETER ( NF_ENORECVARS = -55)
      INTEGER(w2f__i4) NF_ENOTATT
      PARAMETER ( NF_ENOTATT = -43)
      INTEGER(w2f__i4) NF_ENOTINDEFINE
      PARAMETER ( NF_ENOTINDEFINE = -38)
      INTEGER(w2f__i4) NF_ENOTNC
      PARAMETER ( NF_ENOTNC = -51)
      INTEGER(w2f__i4) NF_ENOTVAR
      PARAMETER ( NF_ENOTVAR = -49)
      INTEGER(w2f__i4) NF_EPERM
      PARAMETER ( NF_EPERM = -37)
      INTEGER(w2f__i4) NF_ERANGE
      PARAMETER ( NF_ERANGE = -60)
      INTEGER(w2f__i4) NF_ESTRIDE
      PARAMETER ( NF_ESTRIDE = -58)
      INTEGER(w2f__i4) NF_ESTS
      PARAMETER ( NF_ESTS = -52)
      INTEGER(w2f__i4) NF_EUNLIMIT
      PARAMETER ( NF_EUNLIMIT = -54)
      INTEGER(w2f__i4) NF_EUNLIMPOS
      PARAMETER ( NF_EUNLIMPOS = -47)
      INTEGER(w2f__i4) NF_FATAL
      PARAMETER ( NF_FATAL = 1)
      INTEGER(w2f__i4) NF_FILL
      PARAMETER ( NF_FILL = 0)
      INTEGER(w2f__i4) NF_FILL_BYTE
      PARAMETER ( NF_FILL_BYTE = -127)
      INTEGER(w2f__i4) NF_FILL_CHAR
      PARAMETER ( NF_FILL_CHAR = 0)
      REAL(w2f__8) NF_FILL_DOUBLE
      PARAMETER ( NF_FILL_DOUBLE = 9.969209968386869d+36)
      REAL(w2f__4) NF_FILL_FLOAT
      PARAMETER ( NF_FILL_FLOAT = 9.969210d+36)
      INTEGER(w2f__i4) NF_FILL_INT
      PARAMETER ( NF_FILL_INT = -2147483647)
      INTEGER(w2f__i4) NF_FILL_INT1
      PARAMETER ( NF_FILL_INT1 = -127)
      INTEGER(w2f__i4) NF_FILL_INT2
      PARAMETER ( NF_FILL_INT2 = -32767)
      REAL(w2f__4) NF_FILL_REAL
      PARAMETER ( NF_FILL_REAL = 9.969210d+36)
      INTEGER(w2f__i4) NF_FILL_SHORT
      PARAMETER ( NF_FILL_SHORT = -32767)
      INTEGER(w2f__i4) NF_FLOAT
      PARAMETER ( NF_FLOAT = 5)
      INTEGER(w2f__i4) NF_GLOBAL
      PARAMETER ( NF_GLOBAL = 0)
      INTEGER(w2f__i4) NF_INT
      PARAMETER ( NF_INT = 4)
      INTEGER(w2f__i4) NF_INT1
      PARAMETER ( NF_INT1 = 1)
      INTEGER(w2f__i4) NF_INT2
      PARAMETER ( NF_INT2 = 3)
      INTEGER(w2f__i4) NF_LOCK
      PARAMETER ( NF_LOCK = 1024)
      INTEGER(w2f__i4) NF_MAX_ATTRS
      PARAMETER ( NF_MAX_ATTRS = 4096)
      INTEGER(w2f__i4) NF_MAX_DIMS
      PARAMETER ( NF_MAX_DIMS = 512)
      INTEGER(w2f__i4) NF_MAX_NAME
      PARAMETER ( NF_MAX_NAME = 128)
      INTEGER(w2f__i4) NF_MAX_VARS
      PARAMETER ( NF_MAX_VARS = 4096)
      INTEGER(w2f__i4) NF_MAX_VAR_DIMS
      PARAMETER ( NF_MAX_VAR_DIMS = 512)
      INTEGER(w2f__i4) NF_NOCLOBBER
      PARAMETER ( NF_NOCLOBBER = 4)
      INTEGER(w2f__i4) NF_NOERR
      PARAMETER ( NF_NOERR = 0)
      INTEGER(w2f__i4) NF_NOFILL
      PARAMETER ( NF_NOFILL = 256)
      INTEGER(w2f__i4) NF_NOWRITE
      PARAMETER ( NF_NOWRITE = 0)
      EXTERNAL nf_open
      INTEGER(w2f__i4) nf_open
      EXTERNAL nf_put_att_text
      INTEGER(w2f__i4) nf_put_att_text
      INTEGER(w2f__i4) NF_REAL
      PARAMETER ( NF_REAL = 5)
      EXTERNAL nf_redef
      INTEGER(w2f__i4) nf_redef
      INTEGER(w2f__i4) NF_SHARE
      PARAMETER ( NF_SHARE = 2048)
      INTEGER(w2f__i4) NF_SHORT
      PARAMETER ( NF_SHORT = 3)
      INTEGER(w2f__i4) NF_SIZEHINT_DEFAULT
      PARAMETER ( NF_SIZEHINT_DEFAULT = 0)
      INTEGER(w2f__i4) NF_UNLIMITED
      PARAMETER ( NF_UNLIMITED = 0)
      INTEGER(w2f__i4) NF_VERBOSE
      PARAMETER ( NF_VERBOSE = 2)
      INTEGER(w2f__i4) NF_WRITE
      PARAMETER ( NF_WRITE = 1)
      CHARACTER(80) STR1
C
C     **** statements ****
C
      STR1 = 'nf_open'
      ERRMSG = nf_open(FNAME, (1), FID)
      CALL handle_err(ERRMSG, STR1)
      STR1 = 'nf_redef'
      ERRMSG = nf_redef(FID)
      CALL handle_err(ERRMSG, STR1)
      LCHAR = lastchar(A)
      IF(LCHAR .eq. INT(0_w2f__i8)) THEN
        LCHAR = 1
      ENDIF
      STR1 = 'nf_put_att_text: ' // ANAME
      ERRMSG = nf_put_att_text(FID, (0), ANAME, LCHAR, A(1_w2f__i8 :
     >  MAX(LCHAR, 0)))
      CALL handle_err(ERRMSG, STR1)
      STR1 = 'nf_close'
      ERRMSG = nf_close(FID)
      CALL handle_err(ERRMSG, STR1)
      RETURN
      END SUBROUTINE

      SUBROUTINE add_gatti_netcdf(FNAME, ANAME, A)
      use w2f__types
      use active_module
      IMPLICIT NONE
C
C     **** Parameters and Result ****
C
      CHARACTER(80) FNAME
      CHARACTER(80) ANAME
      INTEGER(w2f__i4) A
C
C     **** Local Variables and functions ****
C
      INTEGER(w2f__i4) ERRMSG
      INTEGER(w2f__i4) FID
      INTEGER(w2f__i4) FILBYTE
      PARAMETER ( FILBYTE = -127)
      INTEGER(w2f__i4) FILCHAR
      PARAMETER ( FILCHAR = 0)
      REAL(w2f__8) FILDOUB
      PARAMETER ( FILDOUB = 9.969209968386869d+36)
      REAL(w2f__4) FILFLOAT
      PARAMETER ( FILFLOAT = 9.969210d+36)
      INTEGER(w2f__i4) FILLONG
      PARAMETER ( FILLONG = -2147483647)
      INTEGER(w2f__i4) FILSHORT
      PARAMETER ( FILSHORT = -32767)
      EXTERNAL handle_err
      INTEGER(w2f__i4) MAXNCATT
      PARAMETER ( MAXNCATT = 2000)
      INTEGER(w2f__i4) MAXNCDIM
      PARAMETER ( MAXNCDIM = 100)
      INTEGER(w2f__i4) MAXNCNAM
      PARAMETER ( MAXNCNAM = 128)
      INTEGER(w2f__i4) MAXNCOP
      PARAMETER ( MAXNCOP = 32)
      INTEGER(w2f__i4) MAXNCVAR
      PARAMETER ( MAXNCVAR = 2000)
      INTEGER(w2f__i4) MAXVDIMS
      PARAMETER ( MAXVDIMS = 100)
      INTEGER(w2f__i4) NCBYTE
      PARAMETER ( NCBYTE = 1)
      INTEGER(w2f__i4) NCCHAR
      PARAMETER ( NCCHAR = 2)
      INTEGER(w2f__i4) NCCLOB
      PARAMETER ( NCCLOB = 0)
      INTEGER(w2f__i4) NCCREAT
      PARAMETER ( NCCREAT = 2)
      INTEGER(w2f__i4) NCDOUBLE
      PARAMETER ( NCDOUBLE = 6)
      INTEGER(w2f__i4) NCEBADD
      PARAMETER ( NCEBADD = -46)
      INTEGER(w2f__i4) NCEBADID
      PARAMETER ( NCEBADID = -33)
      INTEGER(w2f__i4) NCEBADTY
      PARAMETER ( NCEBADTY = -45)
      INTEGER(w2f__i4) NCECOORD
      PARAMETER ( NCECOORD = -40)
      INTEGER(w2f__i4) NCEEXIST
      PARAMETER ( NCEEXIST = -35)
      INTEGER(w2f__i4) NCEGLOB
      PARAMETER ( NCEGLOB = -50)
      INTEGER(w2f__i4) NCEINDEF
      PARAMETER ( NCEINDEF = -39)
      INTEGER(w2f__i4) NCEINVAL
      PARAMETER ( NCEINVAL = -36)
      INTEGER(w2f__i4) NCEMAXAT
      PARAMETER ( NCEMAXAT = -44)
      INTEGER(w2f__i4) NCEMAXDS
      PARAMETER ( NCEMAXDS = -41)
      INTEGER(w2f__i4) NCEMAXVS
      PARAMETER ( NCEMAXVS = -48)
      INTEGER(w2f__i4) NCENAME
      PARAMETER ( NCENAME = -42)
      INTEGER(w2f__i4) NCENFILE
      PARAMETER ( NCENFILE = -31)
      INTEGER(w2f__i4) NCENOATT
      PARAMETER ( NCENOATT = -43)
      INTEGER(w2f__i4) NCENOTIN
      PARAMETER ( NCENOTIN = -38)
      INTEGER(w2f__i4) NCENOTNC
      PARAMETER ( NCENOTNC = -51)
      INTEGER(w2f__i4) NCENOTVR
      PARAMETER ( NCENOTVR = -49)
      INTEGER(w2f__i4) NCENTOOL
      PARAMETER ( NCENTOOL = -53)
      INTEGER(w2f__i4) NCEPERM
      PARAMETER ( NCEPERM = -37)
      INTEGER(w2f__i4) NCESTS
      PARAMETER ( NCESTS = -52)
      INTEGER(w2f__i4) NCEUNLIM
      PARAMETER ( NCEUNLIM = -47)
      INTEGER(w2f__i4) NCEXCL
      PARAMETER ( NCEXCL = 4)
      INTEGER(w2f__i4) NCFATAL
      PARAMETER ( NCFATAL = 1)
      INTEGER(w2f__i4) NCFILL
      PARAMETER ( NCFILL = 0)
      INTEGER(w2f__i4) NCFLOAT
      PARAMETER ( NCFLOAT = 5)
      INTEGER(w2f__i4) NCFOOBAR
      PARAMETER ( NCFOOBAR = 32)
      INTEGER(w2f__i4) NCGLOBAL
      PARAMETER ( NCGLOBAL = 0)
      INTEGER(w2f__i4) NCHDIRTY
      PARAMETER ( NCHDIRTY = 128)
      INTEGER(w2f__i4) NCHSYNC
      PARAMETER ( NCHSYNC = 32)
      INTEGER(w2f__i4) NCINDEF
      PARAMETER ( NCINDEF = 8)
      INTEGER(w2f__i4) NCLINK
      PARAMETER ( NCLINK = 32768)
      INTEGER(w2f__i4) NCLONG
      PARAMETER ( NCLONG = 4)
      INTEGER(w2f__i4) NCNDIRTY
      PARAMETER ( NCNDIRTY = 64)
      INTEGER(w2f__i4) NCNOCLOB
      PARAMETER ( NCNOCLOB = 4)
      INTEGER(w2f__i4) NCNOERR
      PARAMETER ( NCNOERR = 0)
      INTEGER(w2f__i4) NCNOFILL
      PARAMETER ( NCNOFILL = 256)
      INTEGER(w2f__i4) NCNOWRIT
      PARAMETER ( NCNOWRIT = 0)
      INTEGER(w2f__i4) NCNSYNC
      PARAMETER ( NCNSYNC = 16)
      INTEGER(w2f__i4) NCRDWR
      PARAMETER ( NCRDWR = 1)
      INTEGER(w2f__i4) NCSHORT
      PARAMETER ( NCSHORT = 3)
      INTEGER(w2f__i4) NCSYSERR
      PARAMETER ( NCSYSERR = -31)
      INTEGER(w2f__i4) NCUNLIM
      PARAMETER ( NCUNLIM = 0)
      INTEGER(w2f__i4) NCVERBOS
      PARAMETER ( NCVERBOS = 2)
      INTEGER(w2f__i4) NCWRITE
      PARAMETER ( NCWRITE = 1)
      INTEGER(w2f__i4) NF_ALIGN_CHUNK
      PARAMETER ( NF_ALIGN_CHUNK = -1)
      INTEGER(w2f__i4) NF_BYTE
      PARAMETER ( NF_BYTE = 1)
      INTEGER(w2f__i4) NF_CHAR
      PARAMETER ( NF_CHAR = 2)
      INTEGER(w2f__i4) NF_CLOBBER
      PARAMETER ( NF_CLOBBER = 0)
      EXTERNAL nf_close
      INTEGER(w2f__i4) nf_close
      INTEGER(w2f__i4) NF_DOUBLE
      PARAMETER ( NF_DOUBLE = 6)
      INTEGER(w2f__i4) NF_EBADDIM
      PARAMETER ( NF_EBADDIM = -46)
      INTEGER(w2f__i4) NF_EBADID
      PARAMETER ( NF_EBADID = -33)
      INTEGER(w2f__i4) NF_EBADNAME
      PARAMETER ( NF_EBADNAME = -59)
      INTEGER(w2f__i4) NF_EBADTYPE
      PARAMETER ( NF_EBADTYPE = -45)
      INTEGER(w2f__i4) NF_ECHAR
      PARAMETER ( NF_ECHAR = -56)
      INTEGER(w2f__i4) NF_EEDGE
      PARAMETER ( NF_EEDGE = -57)
      INTEGER(w2f__i4) NF_EEXIST
      PARAMETER ( NF_EEXIST = -35)
      INTEGER(w2f__i4) NF_EGLOBAL
      PARAMETER ( NF_EGLOBAL = -50)
      INTEGER(w2f__i4) NF_EINDEFINE
      PARAMETER ( NF_EINDEFINE = -39)
      INTEGER(w2f__i4) NF_EINVAL
      PARAMETER ( NF_EINVAL = -36)
      INTEGER(w2f__i4) NF_EINVALCOORDS
      PARAMETER ( NF_EINVALCOORDS = -40)
      INTEGER(w2f__i4) NF_EMAXATTS
      PARAMETER ( NF_EMAXATTS = -44)
      INTEGER(w2f__i4) NF_EMAXDIMS
      PARAMETER ( NF_EMAXDIMS = -41)
      INTEGER(w2f__i4) NF_EMAXNAME
      PARAMETER ( NF_EMAXNAME = -53)
      INTEGER(w2f__i4) NF_EMAXVARS
      PARAMETER ( NF_EMAXVARS = -48)
      INTEGER(w2f__i4) NF_ENAMEINUSE
      PARAMETER ( NF_ENAMEINUSE = -42)
      INTEGER(w2f__i4) NF_ENOMEM
      PARAMETER ( NF_ENOMEM = -61)
      INTEGER(w2f__i4) NF_ENORECVARS
      PARAMETER ( NF_ENORECVARS = -55)
      INTEGER(w2f__i4) NF_ENOTATT
      PARAMETER ( NF_ENOTATT = -43)
      INTEGER(w2f__i4) NF_ENOTINDEFINE
      PARAMETER ( NF_ENOTINDEFINE = -38)
      INTEGER(w2f__i4) NF_ENOTNC
      PARAMETER ( NF_ENOTNC = -51)
      INTEGER(w2f__i4) NF_ENOTVAR
      PARAMETER ( NF_ENOTVAR = -49)
      INTEGER(w2f__i4) NF_EPERM
      PARAMETER ( NF_EPERM = -37)
      INTEGER(w2f__i4) NF_ERANGE
      PARAMETER ( NF_ERANGE = -60)
      INTEGER(w2f__i4) NF_ESTRIDE
      PARAMETER ( NF_ESTRIDE = -58)
      INTEGER(w2f__i4) NF_ESTS
      PARAMETER ( NF_ESTS = -52)
      INTEGER(w2f__i4) NF_EUNLIMIT
      PARAMETER ( NF_EUNLIMIT = -54)
      INTEGER(w2f__i4) NF_EUNLIMPOS
      PARAMETER ( NF_EUNLIMPOS = -47)
      INTEGER(w2f__i4) NF_FATAL
      PARAMETER ( NF_FATAL = 1)
      INTEGER(w2f__i4) NF_FILL
      PARAMETER ( NF_FILL = 0)
      INTEGER(w2f__i4) NF_FILL_BYTE
      PARAMETER ( NF_FILL_BYTE = -127)
      INTEGER(w2f__i4) NF_FILL_CHAR
      PARAMETER ( NF_FILL_CHAR = 0)
      REAL(w2f__8) NF_FILL_DOUBLE
      PARAMETER ( NF_FILL_DOUBLE = 9.969209968386869d+36)
      REAL(w2f__4) NF_FILL_FLOAT
      PARAMETER ( NF_FILL_FLOAT = 9.969210d+36)
      INTEGER(w2f__i4) NF_FILL_INT
      PARAMETER ( NF_FILL_INT = -2147483647)
      INTEGER(w2f__i4) NF_FILL_INT1
      PARAMETER ( NF_FILL_INT1 = -127)
      INTEGER(w2f__i4) NF_FILL_INT2
      PARAMETER ( NF_FILL_INT2 = -32767)
      REAL(w2f__4) NF_FILL_REAL
      PARAMETER ( NF_FILL_REAL = 9.969210d+36)
      INTEGER(w2f__i4) NF_FILL_SHORT
      PARAMETER ( NF_FILL_SHORT = -32767)
      INTEGER(w2f__i4) NF_FLOAT
      PARAMETER ( NF_FLOAT = 5)
      INTEGER(w2f__i4) NF_GLOBAL
      PARAMETER ( NF_GLOBAL = 0)
      INTEGER(w2f__i4) NF_INT
      PARAMETER ( NF_INT = 4)
      INTEGER(w2f__i4) NF_INT1
      PARAMETER ( NF_INT1 = 1)
      INTEGER(w2f__i4) NF_INT2
      PARAMETER ( NF_INT2 = 3)
      INTEGER(w2f__i4) NF_LOCK
      PARAMETER ( NF_LOCK = 1024)
      INTEGER(w2f__i4) NF_MAX_ATTRS
      PARAMETER ( NF_MAX_ATTRS = 4096)
      INTEGER(w2f__i4) NF_MAX_DIMS
      PARAMETER ( NF_MAX_DIMS = 512)
      INTEGER(w2f__i4) NF_MAX_NAME
      PARAMETER ( NF_MAX_NAME = 128)
      INTEGER(w2f__i4) NF_MAX_VARS
      PARAMETER ( NF_MAX_VARS = 4096)
      INTEGER(w2f__i4) NF_MAX_VAR_DIMS
      PARAMETER ( NF_MAX_VAR_DIMS = 512)
      INTEGER(w2f__i4) NF_NOCLOBBER
      PARAMETER ( NF_NOCLOBBER = 4)
      INTEGER(w2f__i4) NF_NOERR
      PARAMETER ( NF_NOERR = 0)
      INTEGER(w2f__i4) NF_NOFILL
      PARAMETER ( NF_NOFILL = 256)
      INTEGER(w2f__i4) NF_NOWRITE
      PARAMETER ( NF_NOWRITE = 0)
      EXTERNAL nf_open
      INTEGER(w2f__i4) nf_open
      EXTERNAL nf_put_att_int
      INTEGER(w2f__i4) nf_put_att_int
      INTEGER(w2f__i4) NF_REAL
      PARAMETER ( NF_REAL = 5)
      EXTERNAL nf_redef
      INTEGER(w2f__i4) nf_redef
      INTEGER(w2f__i4) NF_SHARE
      PARAMETER ( NF_SHARE = 2048)
      INTEGER(w2f__i4) NF_SHORT
      PARAMETER ( NF_SHORT = 3)
      INTEGER(w2f__i4) NF_SIZEHINT_DEFAULT
      PARAMETER ( NF_SIZEHINT_DEFAULT = 0)
      INTEGER(w2f__i4) NF_UNLIMITED
      PARAMETER ( NF_UNLIMITED = 0)
      INTEGER(w2f__i4) NF_VERBOSE
      PARAMETER ( NF_VERBOSE = 2)
      INTEGER(w2f__i4) NF_WRITE
      PARAMETER ( NF_WRITE = 1)
      CHARACTER(80) STR1
C
C     **** statements ****
C
      STR1 = 'nf_open'
      ERRMSG = nf_open(FNAME, (1), FID)
      CALL handle_err(ERRMSG, STR1)
      STR1 = 'nf_redef'
      ERRMSG = nf_redef(FID)
      CALL handle_err(ERRMSG, STR1)
      STR1 = 'nf_put_att_int ' // ANAME
      ERRMSG = nf_put_att_int(FID, (0), ANAME, (4), (1), A)
      CALL handle_err(ERRMSG, STR1)
      STR1 = 'nf_close'
      ERRMSG = nf_close(FID)
      CALL handle_err(ERRMSG, STR1)
      RETURN
      END SUBROUTINE

      SUBROUTINE add_gattr_netcdf(FNAME, ANAME, A)
      use w2f__types
      use active_module
      IMPLICIT NONE
C
C     **** Parameters and Result ****
C
      CHARACTER(80) FNAME
      CHARACTER(80) ANAME
      type(active) :: A
C
C     **** Local Variables and functions ****
C
      INTEGER(w2f__i4) ERRMSG
      INTEGER(w2f__i4) FID
      INTEGER(w2f__i4) FILBYTE
      PARAMETER ( FILBYTE = -127)
      INTEGER(w2f__i4) FILCHAR
      PARAMETER ( FILCHAR = 0)
      REAL(w2f__8) FILDOUB
      PARAMETER ( FILDOUB = 9.969209968386869d+36)
      REAL(w2f__4) FILFLOAT
      PARAMETER ( FILFLOAT = 9.969210d+36)
      INTEGER(w2f__i4) FILLONG
      PARAMETER ( FILLONG = -2147483647)
      INTEGER(w2f__i4) FILSHORT
      PARAMETER ( FILSHORT = -32767)
      EXTERNAL handle_err
      INTEGER(w2f__i4) MAXNCATT
      PARAMETER ( MAXNCATT = 2000)
      INTEGER(w2f__i4) MAXNCDIM
      PARAMETER ( MAXNCDIM = 100)
      INTEGER(w2f__i4) MAXNCNAM
      PARAMETER ( MAXNCNAM = 128)
      INTEGER(w2f__i4) MAXNCOP
      PARAMETER ( MAXNCOP = 32)
      INTEGER(w2f__i4) MAXNCVAR
      PARAMETER ( MAXNCVAR = 2000)
      INTEGER(w2f__i4) MAXVDIMS
      PARAMETER ( MAXVDIMS = 100)
      INTEGER(w2f__i4) NCBYTE
      PARAMETER ( NCBYTE = 1)
      INTEGER(w2f__i4) NCCHAR
      PARAMETER ( NCCHAR = 2)
      INTEGER(w2f__i4) NCCLOB
      PARAMETER ( NCCLOB = 0)
      INTEGER(w2f__i4) NCCREAT
      PARAMETER ( NCCREAT = 2)
      INTEGER(w2f__i4) NCDOUBLE
      PARAMETER ( NCDOUBLE = 6)
      INTEGER(w2f__i4) NCEBADD
      PARAMETER ( NCEBADD = -46)
      INTEGER(w2f__i4) NCEBADID
      PARAMETER ( NCEBADID = -33)
      INTEGER(w2f__i4) NCEBADTY
      PARAMETER ( NCEBADTY = -45)
      INTEGER(w2f__i4) NCECOORD
      PARAMETER ( NCECOORD = -40)
      INTEGER(w2f__i4) NCEEXIST
      PARAMETER ( NCEEXIST = -35)
      INTEGER(w2f__i4) NCEGLOB
      PARAMETER ( NCEGLOB = -50)
      INTEGER(w2f__i4) NCEINDEF
      PARAMETER ( NCEINDEF = -39)
      INTEGER(w2f__i4) NCEINVAL
      PARAMETER ( NCEINVAL = -36)
      INTEGER(w2f__i4) NCEMAXAT
      PARAMETER ( NCEMAXAT = -44)
      INTEGER(w2f__i4) NCEMAXDS
      PARAMETER ( NCEMAXDS = -41)
      INTEGER(w2f__i4) NCEMAXVS
      PARAMETER ( NCEMAXVS = -48)
      INTEGER(w2f__i4) NCENAME
      PARAMETER ( NCENAME = -42)
      INTEGER(w2f__i4) NCENFILE
      PARAMETER ( NCENFILE = -31)
      INTEGER(w2f__i4) NCENOATT
      PARAMETER ( NCENOATT = -43)
      INTEGER(w2f__i4) NCENOTIN
      PARAMETER ( NCENOTIN = -38)
      INTEGER(w2f__i4) NCENOTNC
      PARAMETER ( NCENOTNC = -51)
      INTEGER(w2f__i4) NCENOTVR
      PARAMETER ( NCENOTVR = -49)
      INTEGER(w2f__i4) NCENTOOL
      PARAMETER ( NCENTOOL = -53)
      INTEGER(w2f__i4) NCEPERM
      PARAMETER ( NCEPERM = -37)
      INTEGER(w2f__i4) NCESTS
      PARAMETER ( NCESTS = -52)
      INTEGER(w2f__i4) NCEUNLIM
      PARAMETER ( NCEUNLIM = -47)
      INTEGER(w2f__i4) NCEXCL
      PARAMETER ( NCEXCL = 4)
      INTEGER(w2f__i4) NCFATAL
      PARAMETER ( NCFATAL = 1)
      INTEGER(w2f__i4) NCFILL
      PARAMETER ( NCFILL = 0)
      INTEGER(w2f__i4) NCFLOAT
      PARAMETER ( NCFLOAT = 5)
      INTEGER(w2f__i4) NCFOOBAR
      PARAMETER ( NCFOOBAR = 32)
      INTEGER(w2f__i4) NCGLOBAL
      PARAMETER ( NCGLOBAL = 0)
      INTEGER(w2f__i4) NCHDIRTY
      PARAMETER ( NCHDIRTY = 128)
      INTEGER(w2f__i4) NCHSYNC
      PARAMETER ( NCHSYNC = 32)
      INTEGER(w2f__i4) NCINDEF
      PARAMETER ( NCINDEF = 8)
      INTEGER(w2f__i4) NCLINK
      PARAMETER ( NCLINK = 32768)
      INTEGER(w2f__i4) NCLONG
      PARAMETER ( NCLONG = 4)
      INTEGER(w2f__i4) NCNDIRTY
      PARAMETER ( NCNDIRTY = 64)
      INTEGER(w2f__i4) NCNOCLOB
      PARAMETER ( NCNOCLOB = 4)
      INTEGER(w2f__i4) NCNOERR
      PARAMETER ( NCNOERR = 0)
      INTEGER(w2f__i4) NCNOFILL
      PARAMETER ( NCNOFILL = 256)
      INTEGER(w2f__i4) NCNOWRIT
      PARAMETER ( NCNOWRIT = 0)
      INTEGER(w2f__i4) NCNSYNC
      PARAMETER ( NCNSYNC = 16)
      INTEGER(w2f__i4) NCRDWR
      PARAMETER ( NCRDWR = 1)
      INTEGER(w2f__i4) NCSHORT
      PARAMETER ( NCSHORT = 3)
      INTEGER(w2f__i4) NCSYSERR
      PARAMETER ( NCSYSERR = -31)
      INTEGER(w2f__i4) NCUNLIM
      PARAMETER ( NCUNLIM = 0)
      INTEGER(w2f__i4) NCVERBOS
      PARAMETER ( NCVERBOS = 2)
      INTEGER(w2f__i4) NCWRITE
      PARAMETER ( NCWRITE = 1)
      INTEGER(w2f__i4) NF_ALIGN_CHUNK
      PARAMETER ( NF_ALIGN_CHUNK = -1)
      INTEGER(w2f__i4) NF_BYTE
      PARAMETER ( NF_BYTE = 1)
      INTEGER(w2f__i4) NF_CHAR
      PARAMETER ( NF_CHAR = 2)
      INTEGER(w2f__i4) NF_CLOBBER
      PARAMETER ( NF_CLOBBER = 0)
      EXTERNAL nf_close
      INTEGER(w2f__i4) nf_close
      INTEGER(w2f__i4) NF_DOUBLE
      PARAMETER ( NF_DOUBLE = 6)
      INTEGER(w2f__i4) NF_EBADDIM
      PARAMETER ( NF_EBADDIM = -46)
      INTEGER(w2f__i4) NF_EBADID
      PARAMETER ( NF_EBADID = -33)
      INTEGER(w2f__i4) NF_EBADNAME
      PARAMETER ( NF_EBADNAME = -59)
      INTEGER(w2f__i4) NF_EBADTYPE
      PARAMETER ( NF_EBADTYPE = -45)
      INTEGER(w2f__i4) NF_ECHAR
      PARAMETER ( NF_ECHAR = -56)
      INTEGER(w2f__i4) NF_EEDGE
      PARAMETER ( NF_EEDGE = -57)
      INTEGER(w2f__i4) NF_EEXIST
      PARAMETER ( NF_EEXIST = -35)
      INTEGER(w2f__i4) NF_EGLOBAL
      PARAMETER ( NF_EGLOBAL = -50)
      INTEGER(w2f__i4) NF_EINDEFINE
      PARAMETER ( NF_EINDEFINE = -39)
      INTEGER(w2f__i4) NF_EINVAL
      PARAMETER ( NF_EINVAL = -36)
      INTEGER(w2f__i4) NF_EINVALCOORDS
      PARAMETER ( NF_EINVALCOORDS = -40)
      INTEGER(w2f__i4) NF_EMAXATTS
      PARAMETER ( NF_EMAXATTS = -44)
      INTEGER(w2f__i4) NF_EMAXDIMS
      PARAMETER ( NF_EMAXDIMS = -41)
      INTEGER(w2f__i4) NF_EMAXNAME
      PARAMETER ( NF_EMAXNAME = -53)
      INTEGER(w2f__i4) NF_EMAXVARS
      PARAMETER ( NF_EMAXVARS = -48)
      INTEGER(w2f__i4) NF_ENAMEINUSE
      PARAMETER ( NF_ENAMEINUSE = -42)
      INTEGER(w2f__i4) NF_ENOMEM
      PARAMETER ( NF_ENOMEM = -61)
      INTEGER(w2f__i4) NF_ENORECVARS
      PARAMETER ( NF_ENORECVARS = -55)
      INTEGER(w2f__i4) NF_ENOTATT
      PARAMETER ( NF_ENOTATT = -43)
      INTEGER(w2f__i4) NF_ENOTINDEFINE
      PARAMETER ( NF_ENOTINDEFINE = -38)
      INTEGER(w2f__i4) NF_ENOTNC
      PARAMETER ( NF_ENOTNC = -51)
      INTEGER(w2f__i4) NF_ENOTVAR
      PARAMETER ( NF_ENOTVAR = -49)
      INTEGER(w2f__i4) NF_EPERM
      PARAMETER ( NF_EPERM = -37)
      INTEGER(w2f__i4) NF_ERANGE
      PARAMETER ( NF_ERANGE = -60)
      INTEGER(w2f__i4) NF_ESTRIDE
      PARAMETER ( NF_ESTRIDE = -58)
      INTEGER(w2f__i4) NF_ESTS
      PARAMETER ( NF_ESTS = -52)
      INTEGER(w2f__i4) NF_EUNLIMIT
      PARAMETER ( NF_EUNLIMIT = -54)
      INTEGER(w2f__i4) NF_EUNLIMPOS
      PARAMETER ( NF_EUNLIMPOS = -47)
      INTEGER(w2f__i4) NF_FATAL
      PARAMETER ( NF_FATAL = 1)
      INTEGER(w2f__i4) NF_FILL
      PARAMETER ( NF_FILL = 0)
      INTEGER(w2f__i4) NF_FILL_BYTE
      PARAMETER ( NF_FILL_BYTE = -127)
      INTEGER(w2f__i4) NF_FILL_CHAR
      PARAMETER ( NF_FILL_CHAR = 0)
      REAL(w2f__8) NF_FILL_DOUBLE
      PARAMETER ( NF_FILL_DOUBLE = 9.969209968386869d+36)
      REAL(w2f__4) NF_FILL_FLOAT
      PARAMETER ( NF_FILL_FLOAT = 9.969210d+36)
      INTEGER(w2f__i4) NF_FILL_INT
      PARAMETER ( NF_FILL_INT = -2147483647)
      INTEGER(w2f__i4) NF_FILL_INT1
      PARAMETER ( NF_FILL_INT1 = -127)
      INTEGER(w2f__i4) NF_FILL_INT2
      PARAMETER ( NF_FILL_INT2 = -32767)
      REAL(w2f__4) NF_FILL_REAL
      PARAMETER ( NF_FILL_REAL = 9.969210d+36)
      INTEGER(w2f__i4) NF_FILL_SHORT
      PARAMETER ( NF_FILL_SHORT = -32767)
      INTEGER(w2f__i4) NF_FLOAT
      PARAMETER ( NF_FLOAT = 5)
      INTEGER(w2f__i4) NF_GLOBAL
      PARAMETER ( NF_GLOBAL = 0)
      INTEGER(w2f__i4) NF_INT
      PARAMETER ( NF_INT = 4)
      INTEGER(w2f__i4) NF_INT1
      PARAMETER ( NF_INT1 = 1)
      INTEGER(w2f__i4) NF_INT2
      PARAMETER ( NF_INT2 = 3)
      INTEGER(w2f__i4) NF_LOCK
      PARAMETER ( NF_LOCK = 1024)
      INTEGER(w2f__i4) NF_MAX_ATTRS
      PARAMETER ( NF_MAX_ATTRS = 4096)
      INTEGER(w2f__i4) NF_MAX_DIMS
      PARAMETER ( NF_MAX_DIMS = 512)
      INTEGER(w2f__i4) NF_MAX_NAME
      PARAMETER ( NF_MAX_NAME = 128)
      INTEGER(w2f__i4) NF_MAX_VARS
      PARAMETER ( NF_MAX_VARS = 4096)
      INTEGER(w2f__i4) NF_MAX_VAR_DIMS
      PARAMETER ( NF_MAX_VAR_DIMS = 512)
      INTEGER(w2f__i4) NF_NOCLOBBER
      PARAMETER ( NF_NOCLOBBER = 4)
      INTEGER(w2f__i4) NF_NOERR
      PARAMETER ( NF_NOERR = 0)
      INTEGER(w2f__i4) NF_NOFILL
      PARAMETER ( NF_NOFILL = 256)
      INTEGER(w2f__i4) NF_NOWRITE
      PARAMETER ( NF_NOWRITE = 0)
      EXTERNAL nf_open
      INTEGER(w2f__i4) nf_open
      EXTERNAL nf_put_att_double
      INTEGER(w2f__i4) nf_put_att_double
      INTEGER(w2f__i4) NF_REAL
      PARAMETER ( NF_REAL = 5)
      EXTERNAL nf_redef
      INTEGER(w2f__i4) nf_redef
      INTEGER(w2f__i4) NF_SHARE
      PARAMETER ( NF_SHARE = 2048)
      INTEGER(w2f__i4) NF_SHORT
      PARAMETER ( NF_SHORT = 3)
      INTEGER(w2f__i4) NF_SIZEHINT_DEFAULT
      PARAMETER ( NF_SIZEHINT_DEFAULT = 0)
      INTEGER(w2f__i4) NF_TYPE
      INTEGER(w2f__i4) NF_UNLIMITED
      PARAMETER ( NF_UNLIMITED = 0)
      INTEGER(w2f__i4) NF_VERBOSE
      PARAMETER ( NF_VERBOSE = 2)
      INTEGER(w2f__i4) NF_WRITE
      PARAMETER ( NF_WRITE = 1)
      EXTERNAL set_nf_real_type
      CHARACTER(80) STR1
C
C     **** statements ****
C
      CALL set_nf_real_type(NF_TYPE)
      STR1 = 'nf_open'
      ERRMSG = nf_open(FNAME, (1), FID)
      CALL handle_err(ERRMSG, STR1)
      STR1 = 'nf_redef'
      ERRMSG = nf_redef(FID)
      CALL handle_err(ERRMSG, STR1)
      STR1 = 'nf_put_att_double ' // ANAME
      ERRMSG = nf_put_att_double(FID, (0), ANAME, NF_TYPE, (1), A)
      CALL handle_err(ERRMSG, STR1)
      STR1 = 'nf_close'
      ERRMSG = nf_close(FID)
      CALL handle_err(ERRMSG, STR1)
      RETURN
      END SUBROUTINE

      SUBROUTINE add_coordinates_netcdf(FNAME, NX, X, NY, Y, UNITS)
      use w2f__types
      use active_module
      IMPLICIT NONE
C
C     **** Parameters and Result ****
C
      CHARACTER(80) FNAME
      INTEGER(w2f__i4) NX
      type(active) :: X(1 : NX)
      INTEGER(w2f__i4) NY
      type(active) :: Y(1 : NY)
      CHARACTER(80) UNITS
C
C     **** Local Variables and functions ****
C
      INTEGER(w2f__i8) t__62
      INTEGER(w2f__i8) t__64
      INTEGER(w2f__i8) t__63
      INTEGER(w2f__i8) t__65
      INTEGER(w2f__i4) DID
      INTEGER(w2f__i4) ERRMSG
      INTEGER(w2f__i4) FID
      INTEGER(w2f__i4) FILBYTE
      PARAMETER ( FILBYTE = -127)
      INTEGER(w2f__i4) FILCHAR
      PARAMETER ( FILCHAR = 0)
      REAL(w2f__8) FILDOUB
      PARAMETER ( FILDOUB = 9.969209968386869d+36)
      REAL(w2f__4) FILFLOAT
      PARAMETER ( FILFLOAT = 9.969210d+36)
      INTEGER(w2f__i4) FILLONG
      PARAMETER ( FILLONG = -2147483647)
      INTEGER(w2f__i4) FILSHORT
      PARAMETER ( FILSHORT = -32767)
      CHARACTER(1) GRID
      EXTERNAL handle_err
      INTEGER(w2f__i4) IX
      INTEGER(w2f__i4) IY
      INTEGER(w2f__i4) MAXNCATT
      PARAMETER ( MAXNCATT = 2000)
      INTEGER(w2f__i4) MAXNCDIM
      PARAMETER ( MAXNCDIM = 100)
      INTEGER(w2f__i4) MAXNCNAM
      PARAMETER ( MAXNCNAM = 128)
      INTEGER(w2f__i4) MAXNCOP
      PARAMETER ( MAXNCOP = 32)
      INTEGER(w2f__i4) MAXNCVAR
      PARAMETER ( MAXNCVAR = 2000)
      INTEGER(w2f__i4) MAXVDIMS
      PARAMETER ( MAXVDIMS = 100)
      INTEGER(w2f__i4) NCBYTE
      PARAMETER ( NCBYTE = 1)
      INTEGER(w2f__i4) NCCHAR
      PARAMETER ( NCCHAR = 2)
      INTEGER(w2f__i4) NCCLOB
      PARAMETER ( NCCLOB = 0)
      INTEGER(w2f__i4) NCCREAT
      PARAMETER ( NCCREAT = 2)
      INTEGER(w2f__i4) NCDOUBLE
      PARAMETER ( NCDOUBLE = 6)
      INTEGER(w2f__i4) NCEBADD
      PARAMETER ( NCEBADD = -46)
      INTEGER(w2f__i4) NCEBADID
      PARAMETER ( NCEBADID = -33)
      INTEGER(w2f__i4) NCEBADTY
      PARAMETER ( NCEBADTY = -45)
      INTEGER(w2f__i4) NCECOORD
      PARAMETER ( NCECOORD = -40)
      INTEGER(w2f__i4) NCEEXIST
      PARAMETER ( NCEEXIST = -35)
      INTEGER(w2f__i4) NCEGLOB
      PARAMETER ( NCEGLOB = -50)
      INTEGER(w2f__i4) NCEINDEF
      PARAMETER ( NCEINDEF = -39)
      INTEGER(w2f__i4) NCEINVAL
      PARAMETER ( NCEINVAL = -36)
      INTEGER(w2f__i4) NCEMAXAT
      PARAMETER ( NCEMAXAT = -44)
      INTEGER(w2f__i4) NCEMAXDS
      PARAMETER ( NCEMAXDS = -41)
      INTEGER(w2f__i4) NCEMAXVS
      PARAMETER ( NCEMAXVS = -48)
      INTEGER(w2f__i4) NCENAME
      PARAMETER ( NCENAME = -42)
      INTEGER(w2f__i4) NCENFILE
      PARAMETER ( NCENFILE = -31)
      INTEGER(w2f__i4) NCENOATT
      PARAMETER ( NCENOATT = -43)
      INTEGER(w2f__i4) NCENOTIN
      PARAMETER ( NCENOTIN = -38)
      INTEGER(w2f__i4) NCENOTNC
      PARAMETER ( NCENOTNC = -51)
      INTEGER(w2f__i4) NCENOTVR
      PARAMETER ( NCENOTVR = -49)
      INTEGER(w2f__i4) NCENTOOL
      PARAMETER ( NCENTOOL = -53)
      INTEGER(w2f__i4) NCEPERM
      PARAMETER ( NCEPERM = -37)
      INTEGER(w2f__i4) NCESTS
      PARAMETER ( NCESTS = -52)
      INTEGER(w2f__i4) NCEUNLIM
      PARAMETER ( NCEUNLIM = -47)
      INTEGER(w2f__i4) NCEXCL
      PARAMETER ( NCEXCL = 4)
      INTEGER(w2f__i4) NCFATAL
      PARAMETER ( NCFATAL = 1)
      INTEGER(w2f__i4) NCFILL
      PARAMETER ( NCFILL = 0)
      INTEGER(w2f__i4) NCFLOAT
      PARAMETER ( NCFLOAT = 5)
      INTEGER(w2f__i4) NCFOOBAR
      PARAMETER ( NCFOOBAR = 32)
      INTEGER(w2f__i4) NCGLOBAL
      PARAMETER ( NCGLOBAL = 0)
      INTEGER(w2f__i4) NCHDIRTY
      PARAMETER ( NCHDIRTY = 128)
      INTEGER(w2f__i4) NCHSYNC
      PARAMETER ( NCHSYNC = 32)
      INTEGER(w2f__i4) NCINDEF
      PARAMETER ( NCINDEF = 8)
      INTEGER(w2f__i4) NCLINK
      PARAMETER ( NCLINK = 32768)
      INTEGER(w2f__i4) NCLONG
      PARAMETER ( NCLONG = 4)
      INTEGER(w2f__i4) NCNDIRTY
      PARAMETER ( NCNDIRTY = 64)
      INTEGER(w2f__i4) NCNOCLOB
      PARAMETER ( NCNOCLOB = 4)
      INTEGER(w2f__i4) NCNOERR
      PARAMETER ( NCNOERR = 0)
      INTEGER(w2f__i4) NCNOFILL
      PARAMETER ( NCNOFILL = 256)
      INTEGER(w2f__i4) NCNOWRIT
      PARAMETER ( NCNOWRIT = 0)
      INTEGER(w2f__i4) NCNSYNC
      PARAMETER ( NCNSYNC = 16)
      INTEGER(w2f__i4) NCRDWR
      PARAMETER ( NCRDWR = 1)
      INTEGER(w2f__i4) NCSHORT
      PARAMETER ( NCSHORT = 3)
      INTEGER(w2f__i4) NCSYSERR
      PARAMETER ( NCSYSERR = -31)
      INTEGER(w2f__i4) NCUNLIM
      PARAMETER ( NCUNLIM = 0)
      INTEGER(w2f__i4) NCVERBOS
      PARAMETER ( NCVERBOS = 2)
      INTEGER(w2f__i4) NCWRITE
      PARAMETER ( NCWRITE = 1)
      INTEGER(w2f__i4) NF_ALIGN_CHUNK
      PARAMETER ( NF_ALIGN_CHUNK = -1)
      INTEGER(w2f__i4) NF_BYTE
      PARAMETER ( NF_BYTE = 1)
      INTEGER(w2f__i4) NF_CHAR
      PARAMETER ( NF_CHAR = 2)
      INTEGER(w2f__i4) NF_CLOBBER
      PARAMETER ( NF_CLOBBER = 0)
      EXTERNAL nf_close
      INTEGER(w2f__i4) nf_close
      EXTERNAL nf_def_var
      INTEGER(w2f__i4) nf_def_var
      INTEGER(w2f__i4) NF_DOUBLE
      PARAMETER ( NF_DOUBLE = 6)
      INTEGER(w2f__i4) NF_EBADDIM
      PARAMETER ( NF_EBADDIM = -46)
      INTEGER(w2f__i4) NF_EBADID
      PARAMETER ( NF_EBADID = -33)
      INTEGER(w2f__i4) NF_EBADNAME
      PARAMETER ( NF_EBADNAME = -59)
      INTEGER(w2f__i4) NF_EBADTYPE
      PARAMETER ( NF_EBADTYPE = -45)
      INTEGER(w2f__i4) NF_ECHAR
      PARAMETER ( NF_ECHAR = -56)
      INTEGER(w2f__i4) NF_EEDGE
      PARAMETER ( NF_EEDGE = -57)
      INTEGER(w2f__i4) NF_EEXIST
      PARAMETER ( NF_EEXIST = -35)
      INTEGER(w2f__i4) NF_EGLOBAL
      PARAMETER ( NF_EGLOBAL = -50)
      INTEGER(w2f__i4) NF_EINDEFINE
      PARAMETER ( NF_EINDEFINE = -39)
      INTEGER(w2f__i4) NF_EINVAL
      PARAMETER ( NF_EINVAL = -36)
      INTEGER(w2f__i4) NF_EINVALCOORDS
      PARAMETER ( NF_EINVALCOORDS = -40)
      INTEGER(w2f__i4) NF_EMAXATTS
      PARAMETER ( NF_EMAXATTS = -44)
      INTEGER(w2f__i4) NF_EMAXDIMS
      PARAMETER ( NF_EMAXDIMS = -41)
      INTEGER(w2f__i4) NF_EMAXNAME
      PARAMETER ( NF_EMAXNAME = -53)
      INTEGER(w2f__i4) NF_EMAXVARS
      PARAMETER ( NF_EMAXVARS = -48)
      INTEGER(w2f__i4) NF_ENAMEINUSE
      PARAMETER ( NF_ENAMEINUSE = -42)
      EXTERNAL nf_enddef
      INTEGER(w2f__i4) nf_enddef
      INTEGER(w2f__i4) NF_ENOMEM
      PARAMETER ( NF_ENOMEM = -61)
      INTEGER(w2f__i4) NF_ENORECVARS
      PARAMETER ( NF_ENORECVARS = -55)
      INTEGER(w2f__i4) NF_ENOTATT
      PARAMETER ( NF_ENOTATT = -43)
      INTEGER(w2f__i4) NF_ENOTINDEFINE
      PARAMETER ( NF_ENOTINDEFINE = -38)
      INTEGER(w2f__i4) NF_ENOTNC
      PARAMETER ( NF_ENOTNC = -51)
      INTEGER(w2f__i4) NF_ENOTVAR
      PARAMETER ( NF_ENOTVAR = -49)
      INTEGER(w2f__i4) NF_EPERM
      PARAMETER ( NF_EPERM = -37)
      INTEGER(w2f__i4) NF_ERANGE
      PARAMETER ( NF_ERANGE = -60)
      INTEGER(w2f__i4) NF_ESTRIDE
      PARAMETER ( NF_ESTRIDE = -58)
      INTEGER(w2f__i4) NF_ESTS
      PARAMETER ( NF_ESTS = -52)
      INTEGER(w2f__i4) NF_EUNLIMIT
      PARAMETER ( NF_EUNLIMIT = -54)
      INTEGER(w2f__i4) NF_EUNLIMPOS
      PARAMETER ( NF_EUNLIMPOS = -47)
      INTEGER(w2f__i4) NF_FATAL
      PARAMETER ( NF_FATAL = 1)
      INTEGER(w2f__i4) NF_FILL
      PARAMETER ( NF_FILL = 0)
      INTEGER(w2f__i4) NF_FILL_BYTE
      PARAMETER ( NF_FILL_BYTE = -127)
      INTEGER(w2f__i4) NF_FILL_CHAR
      PARAMETER ( NF_FILL_CHAR = 0)
      REAL(w2f__8) NF_FILL_DOUBLE
      PARAMETER ( NF_FILL_DOUBLE = 9.969209968386869d+36)
      REAL(w2f__4) NF_FILL_FLOAT
      PARAMETER ( NF_FILL_FLOAT = 9.969210d+36)
      INTEGER(w2f__i4) NF_FILL_INT
      PARAMETER ( NF_FILL_INT = -2147483647)
      INTEGER(w2f__i4) NF_FILL_INT1
      PARAMETER ( NF_FILL_INT1 = -127)
      INTEGER(w2f__i4) NF_FILL_INT2
      PARAMETER ( NF_FILL_INT2 = -32767)
      REAL(w2f__4) NF_FILL_REAL
      PARAMETER ( NF_FILL_REAL = 9.969210d+36)
      INTEGER(w2f__i4) NF_FILL_SHORT
      PARAMETER ( NF_FILL_SHORT = -32767)
      INTEGER(w2f__i4) NF_FLOAT
      PARAMETER ( NF_FLOAT = 5)
      INTEGER(w2f__i4) NF_GLOBAL
      PARAMETER ( NF_GLOBAL = 0)
      EXTERNAL nf_inq_dimid
      INTEGER(w2f__i4) nf_inq_dimid
      INTEGER(w2f__i4) NF_INT
      PARAMETER ( NF_INT = 4)
      INTEGER(w2f__i4) NF_INT1
      PARAMETER ( NF_INT1 = 1)
      INTEGER(w2f__i4) NF_INT2
      PARAMETER ( NF_INT2 = 3)
      INTEGER(w2f__i4) NF_LOCK
      PARAMETER ( NF_LOCK = 1024)
      INTEGER(w2f__i4) NF_MAX_ATTRS
      PARAMETER ( NF_MAX_ATTRS = 4096)
      INTEGER(w2f__i4) NF_MAX_DIMS
      PARAMETER ( NF_MAX_DIMS = 512)
      INTEGER(w2f__i4) NF_MAX_NAME
      PARAMETER ( NF_MAX_NAME = 128)
      INTEGER(w2f__i4) NF_MAX_VARS
      PARAMETER ( NF_MAX_VARS = 4096)
      INTEGER(w2f__i4) NF_MAX_VAR_DIMS
      PARAMETER ( NF_MAX_VAR_DIMS = 512)
      INTEGER(w2f__i4) NF_NOCLOBBER
      PARAMETER ( NF_NOCLOBBER = 4)
      INTEGER(w2f__i4) NF_NOERR
      PARAMETER ( NF_NOERR = 0)
      INTEGER(w2f__i4) NF_NOFILL
      PARAMETER ( NF_NOFILL = 256)
      INTEGER(w2f__i4) NF_NOWRITE
      PARAMETER ( NF_NOWRITE = 0)
      EXTERNAL nf_open
      INTEGER(w2f__i4) nf_open
      EXTERNAL nf_put_att_double
      INTEGER(w2f__i4) nf_put_att_double
      EXTERNAL nf_put_att_text
      INTEGER(w2f__i4) nf_put_att_text
      EXTERNAL nf_put_var_double_ad1
      INTEGER(w2f__i4) nf_put_var_double_ad1
      INTEGER(w2f__i4) NF_REAL
      PARAMETER ( NF_REAL = 5)
      EXTERNAL nf_redef
      INTEGER(w2f__i4) nf_redef
      INTEGER(w2f__i4) NF_SHARE
      PARAMETER ( NF_SHARE = 2048)
      INTEGER(w2f__i4) NF_SHORT
      PARAMETER ( NF_SHORT = 3)
      INTEGER(w2f__i4) NF_SIZEHINT_DEFAULT
      PARAMETER ( NF_SIZEHINT_DEFAULT = 0)
      INTEGER(w2f__i4) NF_TYPE
      INTEGER(w2f__i4) NF_UNLIMITED
      PARAMETER ( NF_UNLIMITED = 0)
      INTEGER(w2f__i4) NF_VERBOSE
      PARAMETER ( NF_VERBOSE = 2)
      INTEGER(w2f__i4) NF_WRITE
      PARAMETER ( NF_WRITE = 1)
      type(active) :: RANGE(1 : 2)
      EXTERNAL set_nf_real_type
      CHARACTER(80) STR1
      CHARACTER(80) STR2
      INTEGER(w2f__i4) TID
      INTEGER(w2f__i4) XID
      INTEGER(w2f__i4) YID
C
C     **** Temporary variables ****
C
      INTEGER(w2f__i4) doloop_ub
      INTEGER(w2f__i4) doloop_ub0
C
C     **** statements ****
C
      t__62 = NX
      t__64 = MAX(t__62, 0_w2f__i8)
      t__63 = NY
      t__65 = MAX(t__63, 0_w2f__i8)
      IF(UNITS .EQ. 'deg') THEN
        GRID = 's'
      ELSE
        IF(UNITS .EQ. 'meters') THEN
          GRID = 'c'
        ELSE
          WRITE(*, *) ' no propery x/y units specified'
        ENDIF
      ENDIF
      CALL set_nf_real_type(NF_TYPE)
      STR1 = 'nf_open'
      ERRMSG = nf_open(FNAME, (1), FID)
      CALL handle_err(ERRMSG, STR1)
      STR1 = 'nf_redef'
      ERRMSG = nf_redef(FID)
      CALL handle_err(ERRMSG, STR1)
      STR1 = 'TIME'
      STR2 = 'nf_inq_dimid: TIME'
      ERRMSG = nf_inq_dimid(FID, STR1, DID)
      CALL handle_err(ERRMSG, STR2)
      STR1 = 'TIME'
      STR2 = 'nf_def_var: TIME'
      ERRMSG = nf_def_var(FID, STR1, NF_TYPE, (1), DID, TID)
      CALL handle_err(ERRMSG, STR2)
      STR1 = 'nf_put_att_text: TIME: long_name'
      STR2 = 'nf_put_att_text: TIME: units'
      ERRMSG = nf_put_att_text(FID, TID, 'long_name', (19),
     >  'time of integration')
      CALL handle_err(ERRMSG, STR1)
      ERRMSG = nf_put_att_text(FID, TID, 'units', (7), 'seconds')
      CALL handle_err(ERRMSG, STR2)
      STR1 = 'nf_inq_dimid: X'
      ERRMSG = nf_inq_dimid(FID, 'X', DID)
      CALL handle_err(ERRMSG, STR1)
      STR1 = 'nf_def_var: X'
      ERRMSG = nf_def_var(FID, 'X', NF_TYPE, (1), DID, XID)
      CALL handle_err(ERRMSG, STR1)
      IF(GRID .EQ. 's') THEN
        ERRMSG = nf_put_att_text(FID, XID, 'long_name', (9),
     >  'longitude')
      ELSE
        IF(GRID .EQ. 'c') THEN
          ERRMSG = nf_put_att_text(FID, XID, 'long_name', (12),
     >  'X-coordinate')
        ENDIF
      ENDIF
      STR1 = 'nf_put_att_text: X: long_name'
      CALL handle_err(ERRMSG, STR1)
      IF(GRID .EQ. 's') THEN
        ERRMSG = nf_put_att_text((FID), (XID), 'units', LEN(UNITS) + 1,
     >  (UNITS // 'E'))
      ELSE
        IF(GRID .EQ. 'c') THEN
          ERRMSG = nf_put_att_text(FID, XID, 'units', LEN(UNITS), UNITS
     > )
        ENDIF
      ENDIF
      STR1 = 'nf_put_att_text: X: units'
      CALL handle_err(ERRMSG, STR1)
      RANGE(1)%v = 9.99999999999999916114D+22
      RANGE(2)%v = (-9.99999999999999916114D+22)
      CALL zero_deriv(RANGE(1))
      CALL zero_deriv(RANGE(2))
      doloop_ub = NX
      DO IX = 1, doloop_ub, 1
        IF (X(IX)%v .LT. RANGE(1)%v) THEN
          RANGE(1)%v = X(IX)%v
          CALL setderiv(RANGE(1),X(IX))
        ENDIF
        IF (X(IX)%v .GT. RANGE(2)%v) THEN
          RANGE(2)%v = X(IX)%v
          CALL setderiv(RANGE(2),X(IX))
        ENDIF
      END DO
      ERRMSG = nf_put_att_double(FID, XID, 'valid_range', NF_TYPE, (2),
     >  RANGE)
      STR1 = 'nf_put_att_text: X: valid_range'
      CALL handle_err(ERRMSG, STR1)
      ERRMSG = nf_inq_dimid(FID, 'Y', DID)
      STR1 = 'nf_inq_dimid: Y'
      CALL handle_err(ERRMSG, STR1)
      STR1 = 'nf_def_var: Y'
      ERRMSG = nf_def_var(FID, 'Y', NF_TYPE, (1), DID, YID)
      CALL handle_err(ERRMSG, STR1)
      IF(GRID .EQ. 's') THEN
        ERRMSG = nf_put_att_text(FID, YID, 'long_name', (8), 'latitude'
     > )
      ELSE
        IF(GRID .EQ. 'c') THEN
          ERRMSG = nf_put_att_text(FID, YID, 'long_name', (12),
     >  'Y-coordinate')
        ENDIF
      ENDIF
      STR1 = 'nf_put_att_text: Y: long_name'
      CALL handle_err(ERRMSG, STR1)
      IF(GRID .EQ. 's') THEN
        ERRMSG = nf_put_att_text((FID), (YID), 'units', LEN(UNITS) + 1,
     >  (UNITS // 'N'))
      ELSE
        IF(GRID .EQ. 'c') THEN
          ERRMSG = nf_put_att_text(FID, YID, 'units', LEN(UNITS), UNITS
     > )
        ENDIF
      ENDIF
      STR1 = 'nf_put_att_text: Y: units'
      CALL handle_err(ERRMSG, STR1)
      RANGE(1)%v = 9.99999999999999916114D+22
      RANGE(2)%v = (-9.99999999999999916114D+22)
      CALL zero_deriv(RANGE(1))
      CALL zero_deriv(RANGE(2))
      doloop_ub0 = NY
      DO IY = 1, doloop_ub0, 1
        IF (Y(IY)%v .LT. RANGE(1)%v) THEN
          RANGE(1)%v = Y(IY)%v
          CALL setderiv(RANGE(1),Y(IY))
        ENDIF
        IF (Y(IY)%v .GT. RANGE(2)%v) THEN
          RANGE(2)%v = Y(IY)%v
          CALL setderiv(RANGE(2),Y(IY))
        ENDIF
      END DO
      ERRMSG = nf_put_att_double(FID, YID, 'valid_range', NF_TYPE, (2),
     >  RANGE)
      ERRMSG = nf_enddef(FID)
      STR1 = 'nf_enddef'
      CALL handle_err(ERRMSG, STR1)
      ERRMSG = nf_put_var_double_ad1(FID, XID, X, NX)
      STR1 = 'nf_put_var_double: X'
      CALL handle_err(ERRMSG, STR1)
      ERRMSG = nf_put_var_double_ad1(FID, YID, Y, NY)
      STR1 = 'nf_put_var_double: Y'
      CALL handle_err(ERRMSG, STR1)
      ERRMSG = nf_close(FID)
      STR1 = 'nf_close'
      CALL handle_err(ERRMSG, STR1)
      RETURN
      END SUBROUTINE

      SUBROUTINE add_pfield_netcdf(FNAME, NX, NY, U, UNAME, ULONGNAME,
     >  UUNITS)
      use w2f__types
      use active_module
      IMPLICIT NONE
C
C     **** Parameters and Result ****
C
      CHARACTER(80) FNAME
      INTEGER(w2f__i4) NX
      INTEGER(w2f__i4) NY
      type(active) :: U
      CHARACTER(80) UNAME
      CHARACTER(80) ULONGNAME
      CHARACTER(80) UUNITS
C
C     **** Local Variables and functions ****
C
      INTEGER(w2f__i4) DID(1 : 2)
      INTEGER(w2f__i4) ERRMSG
      INTEGER(w2f__i4) FID
      INTEGER(w2f__i4) FILBYTE
      PARAMETER ( FILBYTE = -127)
      INTEGER(w2f__i4) FILCHAR
      PARAMETER ( FILCHAR = 0)
      REAL(w2f__8) FILDOUB
      PARAMETER ( FILDOUB = 9.969209968386869d+36)
      REAL(w2f__4) FILFLOAT
      PARAMETER ( FILFLOAT = 9.969210d+36)
      INTEGER(w2f__i4) FILLONG
      PARAMETER ( FILLONG = -2147483647)
      INTEGER(w2f__i4) FILSHORT
      PARAMETER ( FILSHORT = -32767)
      EXTERNAL handle_err
      INTEGER(w2f__i4) MAXNCATT
      PARAMETER ( MAXNCATT = 2000)
      INTEGER(w2f__i4) MAXNCDIM
      PARAMETER ( MAXNCDIM = 100)
      INTEGER(w2f__i4) MAXNCNAM
      PARAMETER ( MAXNCNAM = 128)
      INTEGER(w2f__i4) MAXNCOP
      PARAMETER ( MAXNCOP = 32)
      INTEGER(w2f__i4) MAXNCVAR
      PARAMETER ( MAXNCVAR = 2000)
      INTEGER(w2f__i4) MAXVDIMS
      PARAMETER ( MAXVDIMS = 100)
      INTEGER(w2f__i4) NCBYTE
      PARAMETER ( NCBYTE = 1)
      INTEGER(w2f__i4) NCCHAR
      PARAMETER ( NCCHAR = 2)
      INTEGER(w2f__i4) NCCLOB
      PARAMETER ( NCCLOB = 0)
      INTEGER(w2f__i4) NCCREAT
      PARAMETER ( NCCREAT = 2)
      INTEGER(w2f__i4) NCDOUBLE
      PARAMETER ( NCDOUBLE = 6)
      INTEGER(w2f__i4) NCEBADD
      PARAMETER ( NCEBADD = -46)
      INTEGER(w2f__i4) NCEBADID
      PARAMETER ( NCEBADID = -33)
      INTEGER(w2f__i4) NCEBADTY
      PARAMETER ( NCEBADTY = -45)
      INTEGER(w2f__i4) NCECOORD
      PARAMETER ( NCECOORD = -40)
      INTEGER(w2f__i4) NCEEXIST
      PARAMETER ( NCEEXIST = -35)
      INTEGER(w2f__i4) NCEGLOB
      PARAMETER ( NCEGLOB = -50)
      INTEGER(w2f__i4) NCEINDEF
      PARAMETER ( NCEINDEF = -39)
      INTEGER(w2f__i4) NCEINVAL
      PARAMETER ( NCEINVAL = -36)
      INTEGER(w2f__i4) NCEMAXAT
      PARAMETER ( NCEMAXAT = -44)
      INTEGER(w2f__i4) NCEMAXDS
      PARAMETER ( NCEMAXDS = -41)
      INTEGER(w2f__i4) NCEMAXVS
      PARAMETER ( NCEMAXVS = -48)
      INTEGER(w2f__i4) NCENAME
      PARAMETER ( NCENAME = -42)
      INTEGER(w2f__i4) NCENFILE
      PARAMETER ( NCENFILE = -31)
      INTEGER(w2f__i4) NCENOATT
      PARAMETER ( NCENOATT = -43)
      INTEGER(w2f__i4) NCENOTIN
      PARAMETER ( NCENOTIN = -38)
      INTEGER(w2f__i4) NCENOTNC
      PARAMETER ( NCENOTNC = -51)
      INTEGER(w2f__i4) NCENOTVR
      PARAMETER ( NCENOTVR = -49)
      INTEGER(w2f__i4) NCENTOOL
      PARAMETER ( NCENTOOL = -53)
      INTEGER(w2f__i4) NCEPERM
      PARAMETER ( NCEPERM = -37)
      INTEGER(w2f__i4) NCESTS
      PARAMETER ( NCESTS = -52)
      INTEGER(w2f__i4) NCEUNLIM
      PARAMETER ( NCEUNLIM = -47)
      INTEGER(w2f__i4) NCEXCL
      PARAMETER ( NCEXCL = 4)
      INTEGER(w2f__i4) NCFATAL
      PARAMETER ( NCFATAL = 1)
      INTEGER(w2f__i4) NCFILL
      PARAMETER ( NCFILL = 0)
      INTEGER(w2f__i4) NCFLOAT
      PARAMETER ( NCFLOAT = 5)
      INTEGER(w2f__i4) NCFOOBAR
      PARAMETER ( NCFOOBAR = 32)
      INTEGER(w2f__i4) NCGLOBAL
      PARAMETER ( NCGLOBAL = 0)
      INTEGER(w2f__i4) NCHDIRTY
      PARAMETER ( NCHDIRTY = 128)
      INTEGER(w2f__i4) NCHSYNC
      PARAMETER ( NCHSYNC = 32)
      INTEGER(w2f__i4) NCINDEF
      PARAMETER ( NCINDEF = 8)
      INTEGER(w2f__i4) NCLINK
      PARAMETER ( NCLINK = 32768)
      INTEGER(w2f__i4) NCLONG
      PARAMETER ( NCLONG = 4)
      INTEGER(w2f__i4) NCNDIRTY
      PARAMETER ( NCNDIRTY = 64)
      INTEGER(w2f__i4) NCNOCLOB
      PARAMETER ( NCNOCLOB = 4)
      INTEGER(w2f__i4) NCNOERR
      PARAMETER ( NCNOERR = 0)
      INTEGER(w2f__i4) NCNOFILL
      PARAMETER ( NCNOFILL = 256)
      INTEGER(w2f__i4) NCNOWRIT
      PARAMETER ( NCNOWRIT = 0)
      INTEGER(w2f__i4) NCNSYNC
      PARAMETER ( NCNSYNC = 16)
      INTEGER(w2f__i4) NCRDWR
      PARAMETER ( NCRDWR = 1)
      INTEGER(w2f__i4) NCSHORT
      PARAMETER ( NCSHORT = 3)
      INTEGER(w2f__i4) NCSYSERR
      PARAMETER ( NCSYSERR = -31)
      INTEGER(w2f__i4) NCUNLIM
      PARAMETER ( NCUNLIM = 0)
      INTEGER(w2f__i4) NCVERBOS
      PARAMETER ( NCVERBOS = 2)
      INTEGER(w2f__i4) NCWRITE
      PARAMETER ( NCWRITE = 1)
      INTEGER(w2f__i4) NF_ALIGN_CHUNK
      PARAMETER ( NF_ALIGN_CHUNK = -1)
      INTEGER(w2f__i4) NF_BYTE
      PARAMETER ( NF_BYTE = 1)
      INTEGER(w2f__i4) NF_CHAR
      PARAMETER ( NF_CHAR = 2)
      INTEGER(w2f__i4) NF_CLOBBER
      PARAMETER ( NF_CLOBBER = 0)
      EXTERNAL nf_close
      INTEGER(w2f__i4) nf_close
      EXTERNAL nf_def_var
      INTEGER(w2f__i4) nf_def_var
      INTEGER(w2f__i4) NF_DOUBLE
      PARAMETER ( NF_DOUBLE = 6)
      INTEGER(w2f__i4) NF_EBADDIM
      PARAMETER ( NF_EBADDIM = -46)
      INTEGER(w2f__i4) NF_EBADID
      PARAMETER ( NF_EBADID = -33)
      INTEGER(w2f__i4) NF_EBADNAME
      PARAMETER ( NF_EBADNAME = -59)
      INTEGER(w2f__i4) NF_EBADTYPE
      PARAMETER ( NF_EBADTYPE = -45)
      INTEGER(w2f__i4) NF_ECHAR
      PARAMETER ( NF_ECHAR = -56)
      INTEGER(w2f__i4) NF_EEDGE
      PARAMETER ( NF_EEDGE = -57)
      INTEGER(w2f__i4) NF_EEXIST
      PARAMETER ( NF_EEXIST = -35)
      INTEGER(w2f__i4) NF_EGLOBAL
      PARAMETER ( NF_EGLOBAL = -50)
      INTEGER(w2f__i4) NF_EINDEFINE
      PARAMETER ( NF_EINDEFINE = -39)
      INTEGER(w2f__i4) NF_EINVAL
      PARAMETER ( NF_EINVAL = -36)
      INTEGER(w2f__i4) NF_EINVALCOORDS
      PARAMETER ( NF_EINVALCOORDS = -40)
      INTEGER(w2f__i4) NF_EMAXATTS
      PARAMETER ( NF_EMAXATTS = -44)
      INTEGER(w2f__i4) NF_EMAXDIMS
      PARAMETER ( NF_EMAXDIMS = -41)
      INTEGER(w2f__i4) NF_EMAXNAME
      PARAMETER ( NF_EMAXNAME = -53)
      INTEGER(w2f__i4) NF_EMAXVARS
      PARAMETER ( NF_EMAXVARS = -48)
      INTEGER(w2f__i4) NF_ENAMEINUSE
      PARAMETER ( NF_ENAMEINUSE = -42)
      EXTERNAL nf_enddef
      INTEGER(w2f__i4) nf_enddef
      INTEGER(w2f__i4) NF_ENOMEM
      PARAMETER ( NF_ENOMEM = -61)
      INTEGER(w2f__i4) NF_ENORECVARS
      PARAMETER ( NF_ENORECVARS = -55)
      INTEGER(w2f__i4) NF_ENOTATT
      PARAMETER ( NF_ENOTATT = -43)
      INTEGER(w2f__i4) NF_ENOTINDEFINE
      PARAMETER ( NF_ENOTINDEFINE = -38)
      INTEGER(w2f__i4) NF_ENOTNC
      PARAMETER ( NF_ENOTNC = -51)
      INTEGER(w2f__i4) NF_ENOTVAR
      PARAMETER ( NF_ENOTVAR = -49)
      INTEGER(w2f__i4) NF_EPERM
      PARAMETER ( NF_EPERM = -37)
      INTEGER(w2f__i4) NF_ERANGE
      PARAMETER ( NF_ERANGE = -60)
      INTEGER(w2f__i4) NF_ESTRIDE
      PARAMETER ( NF_ESTRIDE = -58)
      INTEGER(w2f__i4) NF_ESTS
      PARAMETER ( NF_ESTS = -52)
      INTEGER(w2f__i4) NF_EUNLIMIT
      PARAMETER ( NF_EUNLIMIT = -54)
      INTEGER(w2f__i4) NF_EUNLIMPOS
      PARAMETER ( NF_EUNLIMPOS = -47)
      INTEGER(w2f__i4) NF_FATAL
      PARAMETER ( NF_FATAL = 1)
      INTEGER(w2f__i4) NF_FILL
      PARAMETER ( NF_FILL = 0)
      INTEGER(w2f__i4) NF_FILL_BYTE
      PARAMETER ( NF_FILL_BYTE = -127)
      INTEGER(w2f__i4) NF_FILL_CHAR
      PARAMETER ( NF_FILL_CHAR = 0)
      REAL(w2f__8) NF_FILL_DOUBLE
      PARAMETER ( NF_FILL_DOUBLE = 9.969209968386869d+36)
      REAL(w2f__4) NF_FILL_FLOAT
      PARAMETER ( NF_FILL_FLOAT = 9.969210d+36)
      INTEGER(w2f__i4) NF_FILL_INT
      PARAMETER ( NF_FILL_INT = -2147483647)
      INTEGER(w2f__i4) NF_FILL_INT1
      PARAMETER ( NF_FILL_INT1 = -127)
      INTEGER(w2f__i4) NF_FILL_INT2
      PARAMETER ( NF_FILL_INT2 = -32767)
      REAL(w2f__4) NF_FILL_REAL
      PARAMETER ( NF_FILL_REAL = 9.969210d+36)
      INTEGER(w2f__i4) NF_FILL_SHORT
      PARAMETER ( NF_FILL_SHORT = -32767)
      INTEGER(w2f__i4) NF_FLOAT
      PARAMETER ( NF_FLOAT = 5)
      INTEGER(w2f__i4) NF_GLOBAL
      PARAMETER ( NF_GLOBAL = 0)
      EXTERNAL nf_inq_dimid
      INTEGER(w2f__i4) nf_inq_dimid
      INTEGER(w2f__i4) NF_INT
      PARAMETER ( NF_INT = 4)
      INTEGER(w2f__i4) NF_INT1
      PARAMETER ( NF_INT1 = 1)
      INTEGER(w2f__i4) NF_INT2
      PARAMETER ( NF_INT2 = 3)
      INTEGER(w2f__i4) NF_LOCK
      PARAMETER ( NF_LOCK = 1024)
      INTEGER(w2f__i4) NF_MAX_ATTRS
      PARAMETER ( NF_MAX_ATTRS = 4096)
      INTEGER(w2f__i4) NF_MAX_DIMS
      PARAMETER ( NF_MAX_DIMS = 512)
      INTEGER(w2f__i4) NF_MAX_NAME
      PARAMETER ( NF_MAX_NAME = 128)
      INTEGER(w2f__i4) NF_MAX_VARS
      PARAMETER ( NF_MAX_VARS = 4096)
      INTEGER(w2f__i4) NF_MAX_VAR_DIMS
      PARAMETER ( NF_MAX_VAR_DIMS = 512)
      INTEGER(w2f__i4) NF_NOCLOBBER
      PARAMETER ( NF_NOCLOBBER = 4)
      INTEGER(w2f__i4) NF_NOERR
      PARAMETER ( NF_NOERR = 0)
      INTEGER(w2f__i4) NF_NOFILL
      PARAMETER ( NF_NOFILL = 256)
      INTEGER(w2f__i4) NF_NOWRITE
      PARAMETER ( NF_NOWRITE = 0)
      EXTERNAL nf_open
      INTEGER(w2f__i4) nf_open
      EXTERNAL nf_put_att_double
      INTEGER(w2f__i4) nf_put_att_double
      EXTERNAL nf_put_att_text
      INTEGER(w2f__i4) nf_put_att_text
      EXTERNAL nf_put_var_double_ad0
      INTEGER(w2f__i4) nf_put_var_double_ad0
      INTEGER(w2f__i4) NF_REAL
      PARAMETER ( NF_REAL = 5)
      EXTERNAL nf_redef
      INTEGER(w2f__i4) nf_redef
      INTEGER(w2f__i4) NF_SHARE
      PARAMETER ( NF_SHARE = 2048)
      INTEGER(w2f__i4) NF_SHORT
      PARAMETER ( NF_SHORT = 3)
      INTEGER(w2f__i4) NF_SIZEHINT_DEFAULT
      PARAMETER ( NF_SIZEHINT_DEFAULT = 0)
      INTEGER(w2f__i4) NF_TYPE
      INTEGER(w2f__i4) NF_UNLIMITED
      PARAMETER ( NF_UNLIMITED = 0)
      INTEGER(w2f__i4) NF_VERBOSE
      PARAMETER ( NF_VERBOSE = 2)
      INTEGER(w2f__i4) NF_WRITE
      PARAMETER ( NF_WRITE = 1)
      EXTERNAL set_nf_real_type
      CHARACTER(80) STR1
      INTEGER(w2f__i4) UID
C
C     **** statements ****
C
      CALL set_nf_real_type(NF_TYPE)
      STR1 = 'nf_open'
      ERRMSG = nf_open(FNAME, (1), FID)
      CALL handle_err(ERRMSG, STR1)
      STR1 = 'nf_redef'
      ERRMSG = nf_redef(FID)
      CALL handle_err(ERRMSG, STR1)
      ERRMSG = nf_inq_dimid(FID, 'X', DID(1))
      STR1 = 'nf_inq_dimid: X'
      CALL handle_err(ERRMSG, STR1)
      ERRMSG = nf_inq_dimid(FID, 'Y', DID(2))
      STR1 = 'nf_inq_dimid: Y'
      CALL handle_err(ERRMSG, STR1)
      ERRMSG = nf_def_var(FID, UNAME, NF_TYPE, (2), DID, UID)
      STR1 = 'nf_def_var: ' // UNAME
      CALL handle_err(ERRMSG, STR1)
      ERRMSG = nf_put_att_text(FID, UID, 'long_name', LEN(ULONGNAME),
     >  ULONGNAME)
      STR1 = 'nf_put_att_double: ' // UNAME // ': long_name'
      CALL handle_err(ERRMSG, STR1)
      ERRMSG = nf_put_att_text(FID, UID, 'units', LEN(UUNITS), UUNITS)
      STR1 = 'nf_put_att_double: ' // UNAME // ': units'
      CALL handle_err(ERRMSG, STR1)
      ERRMSG = nf_put_att_double(FID, UID, 'missing_value', NF_TYPE, (1
     > ), (-9.9E+01))
      STR1 = 'nf_put_att_double: ' // UNAME // ': missing_value'
      CALL handle_err(ERRMSG, STR1)
      ERRMSG = nf_enddef(FID)
      STR1 = 'nf_enddef'
      CALL handle_err(ERRMSG, STR1)
      ERRMSG = nf_put_var_double_ad0(FID, UID, U, (1))
      STR1 = 'nf_put_var_double: ' // UNAME
      CALL handle_err(ERRMSG, STR1)
      ERRMSG = nf_close(FID)
      STR1 = 'nf_close'
      CALL handle_err(ERRMSG, STR1)
      RETURN
      END SUBROUTINE

      SUBROUTINE add_recvar_netcdf(FNAME, UNAME, ULONGNAME, UUNITS)
      use w2f__types
      use active_module
      IMPLICIT NONE
C
C     **** Parameters and Result ****
C
      CHARACTER(80) FNAME
      CHARACTER(80) UNAME
      CHARACTER(80) ULONGNAME
      CHARACTER(80) UUNITS
C
C     **** Local Variables and functions ****
C
      INTEGER(w2f__i4) DID(1 : 3)
      INTEGER(w2f__i4) ERRMSG
      INTEGER(w2f__i4) FID
      INTEGER(w2f__i4) FILBYTE
      PARAMETER ( FILBYTE = -127)
      INTEGER(w2f__i4) FILCHAR
      PARAMETER ( FILCHAR = 0)
      REAL(w2f__8) FILDOUB
      PARAMETER ( FILDOUB = 9.969209968386869d+36)
      REAL(w2f__4) FILFLOAT
      PARAMETER ( FILFLOAT = 9.969210d+36)
      INTEGER(w2f__i4) FILLONG
      PARAMETER ( FILLONG = -2147483647)
      INTEGER(w2f__i4) FILSHORT
      PARAMETER ( FILSHORT = -32767)
      EXTERNAL handle_err
      INTEGER(w2f__i4) MAXNCATT
      PARAMETER ( MAXNCATT = 2000)
      INTEGER(w2f__i4) MAXNCDIM
      PARAMETER ( MAXNCDIM = 100)
      INTEGER(w2f__i4) MAXNCNAM
      PARAMETER ( MAXNCNAM = 128)
      INTEGER(w2f__i4) MAXNCOP
      PARAMETER ( MAXNCOP = 32)
      INTEGER(w2f__i4) MAXNCVAR
      PARAMETER ( MAXNCVAR = 2000)
      INTEGER(w2f__i4) MAXVDIMS
      PARAMETER ( MAXVDIMS = 100)
      INTEGER(w2f__i4) NCBYTE
      PARAMETER ( NCBYTE = 1)
      INTEGER(w2f__i4) NCCHAR
      PARAMETER ( NCCHAR = 2)
      INTEGER(w2f__i4) NCCLOB
      PARAMETER ( NCCLOB = 0)
      INTEGER(w2f__i4) NCCREAT
      PARAMETER ( NCCREAT = 2)
      INTEGER(w2f__i4) NCDOUBLE
      PARAMETER ( NCDOUBLE = 6)
      INTEGER(w2f__i4) NCEBADD
      PARAMETER ( NCEBADD = -46)
      INTEGER(w2f__i4) NCEBADID
      PARAMETER ( NCEBADID = -33)
      INTEGER(w2f__i4) NCEBADTY
      PARAMETER ( NCEBADTY = -45)
      INTEGER(w2f__i4) NCECOORD
      PARAMETER ( NCECOORD = -40)
      INTEGER(w2f__i4) NCEEXIST
      PARAMETER ( NCEEXIST = -35)
      INTEGER(w2f__i4) NCEGLOB
      PARAMETER ( NCEGLOB = -50)
      INTEGER(w2f__i4) NCEINDEF
      PARAMETER ( NCEINDEF = -39)
      INTEGER(w2f__i4) NCEINVAL
      PARAMETER ( NCEINVAL = -36)
      INTEGER(w2f__i4) NCEMAXAT
      PARAMETER ( NCEMAXAT = -44)
      INTEGER(w2f__i4) NCEMAXDS
      PARAMETER ( NCEMAXDS = -41)
      INTEGER(w2f__i4) NCEMAXVS
      PARAMETER ( NCEMAXVS = -48)
      INTEGER(w2f__i4) NCENAME
      PARAMETER ( NCENAME = -42)
      INTEGER(w2f__i4) NCENFILE
      PARAMETER ( NCENFILE = -31)
      INTEGER(w2f__i4) NCENOATT
      PARAMETER ( NCENOATT = -43)
      INTEGER(w2f__i4) NCENOTIN
      PARAMETER ( NCENOTIN = -38)
      INTEGER(w2f__i4) NCENOTNC
      PARAMETER ( NCENOTNC = -51)
      INTEGER(w2f__i4) NCENOTVR
      PARAMETER ( NCENOTVR = -49)
      INTEGER(w2f__i4) NCENTOOL
      PARAMETER ( NCENTOOL = -53)
      INTEGER(w2f__i4) NCEPERM
      PARAMETER ( NCEPERM = -37)
      INTEGER(w2f__i4) NCESTS
      PARAMETER ( NCESTS = -52)
      INTEGER(w2f__i4) NCEUNLIM
      PARAMETER ( NCEUNLIM = -47)
      INTEGER(w2f__i4) NCEXCL
      PARAMETER ( NCEXCL = 4)
      INTEGER(w2f__i4) NCFATAL
      PARAMETER ( NCFATAL = 1)
      INTEGER(w2f__i4) NCFILL
      PARAMETER ( NCFILL = 0)
      INTEGER(w2f__i4) NCFLOAT
      PARAMETER ( NCFLOAT = 5)
      INTEGER(w2f__i4) NCFOOBAR
      PARAMETER ( NCFOOBAR = 32)
      INTEGER(w2f__i4) NCGLOBAL
      PARAMETER ( NCGLOBAL = 0)
      INTEGER(w2f__i4) NCHDIRTY
      PARAMETER ( NCHDIRTY = 128)
      INTEGER(w2f__i4) NCHSYNC
      PARAMETER ( NCHSYNC = 32)
      INTEGER(w2f__i4) NCINDEF
      PARAMETER ( NCINDEF = 8)
      INTEGER(w2f__i4) NCLINK
      PARAMETER ( NCLINK = 32768)
      INTEGER(w2f__i4) NCLONG
      PARAMETER ( NCLONG = 4)
      INTEGER(w2f__i4) NCNDIRTY
      PARAMETER ( NCNDIRTY = 64)
      INTEGER(w2f__i4) NCNOCLOB
      PARAMETER ( NCNOCLOB = 4)
      INTEGER(w2f__i4) NCNOERR
      PARAMETER ( NCNOERR = 0)
      INTEGER(w2f__i4) NCNOFILL
      PARAMETER ( NCNOFILL = 256)
      INTEGER(w2f__i4) NCNOWRIT
      PARAMETER ( NCNOWRIT = 0)
      INTEGER(w2f__i4) NCNSYNC
      PARAMETER ( NCNSYNC = 16)
      INTEGER(w2f__i4) NCRDWR
      PARAMETER ( NCRDWR = 1)
      INTEGER(w2f__i4) NCSHORT
      PARAMETER ( NCSHORT = 3)
      INTEGER(w2f__i4) NCSYSERR
      PARAMETER ( NCSYSERR = -31)
      INTEGER(w2f__i4) NCUNLIM
      PARAMETER ( NCUNLIM = 0)
      INTEGER(w2f__i4) NCVERBOS
      PARAMETER ( NCVERBOS = 2)
      INTEGER(w2f__i4) NCWRITE
      PARAMETER ( NCWRITE = 1)
      INTEGER(w2f__i4) NF_ALIGN_CHUNK
      PARAMETER ( NF_ALIGN_CHUNK = -1)
      INTEGER(w2f__i4) NF_BYTE
      PARAMETER ( NF_BYTE = 1)
      INTEGER(w2f__i4) NF_CHAR
      PARAMETER ( NF_CHAR = 2)
      INTEGER(w2f__i4) NF_CLOBBER
      PARAMETER ( NF_CLOBBER = 0)
      EXTERNAL nf_close
      INTEGER(w2f__i4) nf_close
      EXTERNAL nf_def_var
      INTEGER(w2f__i4) nf_def_var
      INTEGER(w2f__i4) NF_DOUBLE
      PARAMETER ( NF_DOUBLE = 6)
      INTEGER(w2f__i4) NF_EBADDIM
      PARAMETER ( NF_EBADDIM = -46)
      INTEGER(w2f__i4) NF_EBADID
      PARAMETER ( NF_EBADID = -33)
      INTEGER(w2f__i4) NF_EBADNAME
      PARAMETER ( NF_EBADNAME = -59)
      INTEGER(w2f__i4) NF_EBADTYPE
      PARAMETER ( NF_EBADTYPE = -45)
      INTEGER(w2f__i4) NF_ECHAR
      PARAMETER ( NF_ECHAR = -56)
      INTEGER(w2f__i4) NF_EEDGE
      PARAMETER ( NF_EEDGE = -57)
      INTEGER(w2f__i4) NF_EEXIST
      PARAMETER ( NF_EEXIST = -35)
      INTEGER(w2f__i4) NF_EGLOBAL
      PARAMETER ( NF_EGLOBAL = -50)
      INTEGER(w2f__i4) NF_EINDEFINE
      PARAMETER ( NF_EINDEFINE = -39)
      INTEGER(w2f__i4) NF_EINVAL
      PARAMETER ( NF_EINVAL = -36)
      INTEGER(w2f__i4) NF_EINVALCOORDS
      PARAMETER ( NF_EINVALCOORDS = -40)
      INTEGER(w2f__i4) NF_EMAXATTS
      PARAMETER ( NF_EMAXATTS = -44)
      INTEGER(w2f__i4) NF_EMAXDIMS
      PARAMETER ( NF_EMAXDIMS = -41)
      INTEGER(w2f__i4) NF_EMAXNAME
      PARAMETER ( NF_EMAXNAME = -53)
      INTEGER(w2f__i4) NF_EMAXVARS
      PARAMETER ( NF_EMAXVARS = -48)
      INTEGER(w2f__i4) NF_ENAMEINUSE
      PARAMETER ( NF_ENAMEINUSE = -42)
      EXTERNAL nf_enddef
      INTEGER(w2f__i4) nf_enddef
      INTEGER(w2f__i4) NF_ENOMEM
      PARAMETER ( NF_ENOMEM = -61)
      INTEGER(w2f__i4) NF_ENORECVARS
      PARAMETER ( NF_ENORECVARS = -55)
      INTEGER(w2f__i4) NF_ENOTATT
      PARAMETER ( NF_ENOTATT = -43)
      INTEGER(w2f__i4) NF_ENOTINDEFINE
      PARAMETER ( NF_ENOTINDEFINE = -38)
      INTEGER(w2f__i4) NF_ENOTNC
      PARAMETER ( NF_ENOTNC = -51)
      INTEGER(w2f__i4) NF_ENOTVAR
      PARAMETER ( NF_ENOTVAR = -49)
      INTEGER(w2f__i4) NF_EPERM
      PARAMETER ( NF_EPERM = -37)
      INTEGER(w2f__i4) NF_ERANGE
      PARAMETER ( NF_ERANGE = -60)
      INTEGER(w2f__i4) NF_ESTRIDE
      PARAMETER ( NF_ESTRIDE = -58)
      INTEGER(w2f__i4) NF_ESTS
      PARAMETER ( NF_ESTS = -52)
      INTEGER(w2f__i4) NF_EUNLIMIT
      PARAMETER ( NF_EUNLIMIT = -54)
      INTEGER(w2f__i4) NF_EUNLIMPOS
      PARAMETER ( NF_EUNLIMPOS = -47)
      INTEGER(w2f__i4) NF_FATAL
      PARAMETER ( NF_FATAL = 1)
      INTEGER(w2f__i4) NF_FILL
      PARAMETER ( NF_FILL = 0)
      INTEGER(w2f__i4) NF_FILL_BYTE
      PARAMETER ( NF_FILL_BYTE = -127)
      INTEGER(w2f__i4) NF_FILL_CHAR
      PARAMETER ( NF_FILL_CHAR = 0)
      REAL(w2f__8) NF_FILL_DOUBLE
      PARAMETER ( NF_FILL_DOUBLE = 9.969209968386869d+36)
      REAL(w2f__4) NF_FILL_FLOAT
      PARAMETER ( NF_FILL_FLOAT = 9.969210d+36)
      INTEGER(w2f__i4) NF_FILL_INT
      PARAMETER ( NF_FILL_INT = -2147483647)
      INTEGER(w2f__i4) NF_FILL_INT1
      PARAMETER ( NF_FILL_INT1 = -127)
      INTEGER(w2f__i4) NF_FILL_INT2
      PARAMETER ( NF_FILL_INT2 = -32767)
      REAL(w2f__4) NF_FILL_REAL
      PARAMETER ( NF_FILL_REAL = 9.969210d+36)
      INTEGER(w2f__i4) NF_FILL_SHORT
      PARAMETER ( NF_FILL_SHORT = -32767)
      INTEGER(w2f__i4) NF_FLOAT
      PARAMETER ( NF_FLOAT = 5)
      INTEGER(w2f__i4) NF_GLOBAL
      PARAMETER ( NF_GLOBAL = 0)
      EXTERNAL nf_inq_dimid
      INTEGER(w2f__i4) nf_inq_dimid
      INTEGER(w2f__i4) NF_INT
      PARAMETER ( NF_INT = 4)
      INTEGER(w2f__i4) NF_INT1
      PARAMETER ( NF_INT1 = 1)
      INTEGER(w2f__i4) NF_INT2
      PARAMETER ( NF_INT2 = 3)
      INTEGER(w2f__i4) NF_LOCK
      PARAMETER ( NF_LOCK = 1024)
      INTEGER(w2f__i4) NF_MAX_ATTRS
      PARAMETER ( NF_MAX_ATTRS = 4096)
      INTEGER(w2f__i4) NF_MAX_DIMS
      PARAMETER ( NF_MAX_DIMS = 512)
      INTEGER(w2f__i4) NF_MAX_NAME
      PARAMETER ( NF_MAX_NAME = 128)
      INTEGER(w2f__i4) NF_MAX_VARS
      PARAMETER ( NF_MAX_VARS = 4096)
      INTEGER(w2f__i4) NF_MAX_VAR_DIMS
      PARAMETER ( NF_MAX_VAR_DIMS = 512)
      INTEGER(w2f__i4) NF_NOCLOBBER
      PARAMETER ( NF_NOCLOBBER = 4)
      INTEGER(w2f__i4) NF_NOERR
      PARAMETER ( NF_NOERR = 0)
      INTEGER(w2f__i4) NF_NOFILL
      PARAMETER ( NF_NOFILL = 256)
      INTEGER(w2f__i4) NF_NOWRITE
      PARAMETER ( NF_NOWRITE = 0)
      EXTERNAL nf_open
      INTEGER(w2f__i4) nf_open
      EXTERNAL nf_put_att_double
      INTEGER(w2f__i4) nf_put_att_double
      EXTERNAL nf_put_att_text
      INTEGER(w2f__i4) nf_put_att_text
      INTEGER(w2f__i4) NF_REAL
      PARAMETER ( NF_REAL = 5)
      EXTERNAL nf_redef
      INTEGER(w2f__i4) nf_redef
      INTEGER(w2f__i4) NF_SHARE
      PARAMETER ( NF_SHARE = 2048)
      INTEGER(w2f__i4) NF_SHORT
      PARAMETER ( NF_SHORT = 3)
      INTEGER(w2f__i4) NF_SIZEHINT_DEFAULT
      PARAMETER ( NF_SIZEHINT_DEFAULT = 0)
      INTEGER(w2f__i4) NF_TYPE
      INTEGER(w2f__i4) NF_UNLIMITED
      PARAMETER ( NF_UNLIMITED = 0)
      INTEGER(w2f__i4) NF_VERBOSE
      PARAMETER ( NF_VERBOSE = 2)
      INTEGER(w2f__i4) NF_WRITE
      PARAMETER ( NF_WRITE = 1)
      EXTERNAL set_nf_real_type
      CHARACTER(80) STR1
      INTEGER(w2f__i4) UID
C
C     **** statements ****
C
      CALL set_nf_real_type(NF_TYPE)
      ERRMSG = nf_open(FNAME, (1), FID)
      STR1 = 'nf_open'
      CALL handle_err(ERRMSG, STR1)
      ERRMSG = nf_redef(FID)
      STR1 = 'nf_redef'
      CALL handle_err(ERRMSG, STR1)
      ERRMSG = nf_inq_dimid(FID, 'X', DID(1))
      STR1 = 'nf_inq_dimid: X'
      CALL handle_err(ERRMSG, STR1)
      ERRMSG = nf_inq_dimid(FID, 'Y', DID(2))
      STR1 = 'nf_inq_dimid: Y'
      CALL handle_err(ERRMSG, STR1)
      ERRMSG = nf_inq_dimid(FID, 'TIME', DID(3))
      STR1 = 'nf_inq_dimid: TIME'
      CALL handle_err(ERRMSG, STR1)
      ERRMSG = nf_def_var(FID, UNAME, NF_TYPE, (3), DID, UID)
      STR1 = 'nf_def_var: ' // UNAME
      CALL handle_err(ERRMSG, STR1)
      ERRMSG = nf_put_att_text(FID, UID, 'long_name', LEN(ULONGNAME),
     >  ULONGNAME)
      STR1 = 'nf_put_att_double: ' // UNAME // ': ' // ULONGNAME
      CALL handle_err(ERRMSG, STR1)
      ERRMSG = nf_put_att_text(FID, UID, 'units', LEN(UUNITS), UUNITS)
      STR1 = 'nf_put_att_double: ' // UNAME // ': ' // UUNITS
      CALL handle_err(ERRMSG, STR1)
      ERRMSG = nf_put_att_double(FID, UID, 'missing_value', NF_TYPE, (1
     > ), (-9.9E+01))
      STR1 = 'nf_put_att_double: ' // UNAME // ': missing_value'
      CALL handle_err(ERRMSG, STR1)
      ERRMSG = nf_enddef(FID)
      STR1 = 'nf_enddef'
      CALL handle_err(ERRMSG, STR1)
      ERRMSG = nf_close(FID)
      STR1 = 'nf_close'
      CALL handle_err(ERRMSG, STR1)
      RETURN
      END SUBROUTINE

      SUBROUTINE write_state_netcdf(FNAME, NX, NY, IT, UNAME, U)
      use w2f__types
      use active_module
      IMPLICIT NONE
C
C     **** Parameters and Result ****
C
      CHARACTER(80) FNAME
      INTEGER(w2f__i4) NX
      INTEGER(w2f__i4) NY
      INTEGER(w2f__i4) IT
      CHARACTER(80) UNAME
      type(active) :: U(1 : NX, 1 : NY)
C
C     **** Local Variables and functions ****
C
      INTEGER(w2f__i8) t__66
      INTEGER(w2f__i8) t__68
      INTEGER(w2f__i8) t__67
      INTEGER(w2f__i8) t__70
      INTEGER(w2f__i4) COUNT(1 : 3)
      INTEGER(w2f__i4) ERRMSG
      INTEGER(w2f__i4) FID
      INTEGER(w2f__i4) FILBYTE
      PARAMETER ( FILBYTE = -127)
      INTEGER(w2f__i4) FILCHAR
      PARAMETER ( FILCHAR = 0)
      REAL(w2f__8) FILDOUB
      PARAMETER ( FILDOUB = 9.969209968386869d+36)
      REAL(w2f__4) FILFLOAT
      PARAMETER ( FILFLOAT = 9.969210d+36)
      INTEGER(w2f__i4) FILLONG
      PARAMETER ( FILLONG = -2147483647)
      INTEGER(w2f__i4) FILSHORT
      PARAMETER ( FILSHORT = -32767)
      EXTERNAL handle_err
      INTEGER(w2f__i4) MAXNCATT
      PARAMETER ( MAXNCATT = 2000)
      INTEGER(w2f__i4) MAXNCDIM
      PARAMETER ( MAXNCDIM = 100)
      INTEGER(w2f__i4) MAXNCNAM
      PARAMETER ( MAXNCNAM = 128)
      INTEGER(w2f__i4) MAXNCOP
      PARAMETER ( MAXNCOP = 32)
      INTEGER(w2f__i4) MAXNCVAR
      PARAMETER ( MAXNCVAR = 2000)
      INTEGER(w2f__i4) MAXVDIMS
      PARAMETER ( MAXVDIMS = 100)
      INTEGER(w2f__i4) NCBYTE
      PARAMETER ( NCBYTE = 1)
      INTEGER(w2f__i4) NCCHAR
      PARAMETER ( NCCHAR = 2)
      INTEGER(w2f__i4) NCCLOB
      PARAMETER ( NCCLOB = 0)
      INTEGER(w2f__i4) NCCREAT
      PARAMETER ( NCCREAT = 2)
      INTEGER(w2f__i4) NCDOUBLE
      PARAMETER ( NCDOUBLE = 6)
      INTEGER(w2f__i4) NCEBADD
      PARAMETER ( NCEBADD = -46)
      INTEGER(w2f__i4) NCEBADID
      PARAMETER ( NCEBADID = -33)
      INTEGER(w2f__i4) NCEBADTY
      PARAMETER ( NCEBADTY = -45)
      INTEGER(w2f__i4) NCECOORD
      PARAMETER ( NCECOORD = -40)
      INTEGER(w2f__i4) NCEEXIST
      PARAMETER ( NCEEXIST = -35)
      INTEGER(w2f__i4) NCEGLOB
      PARAMETER ( NCEGLOB = -50)
      INTEGER(w2f__i4) NCEINDEF
      PARAMETER ( NCEINDEF = -39)
      INTEGER(w2f__i4) NCEINVAL
      PARAMETER ( NCEINVAL = -36)
      INTEGER(w2f__i4) NCEMAXAT
      PARAMETER ( NCEMAXAT = -44)
      INTEGER(w2f__i4) NCEMAXDS
      PARAMETER ( NCEMAXDS = -41)
      INTEGER(w2f__i4) NCEMAXVS
      PARAMETER ( NCEMAXVS = -48)
      INTEGER(w2f__i4) NCENAME
      PARAMETER ( NCENAME = -42)
      INTEGER(w2f__i4) NCENFILE
      PARAMETER ( NCENFILE = -31)
      INTEGER(w2f__i4) NCENOATT
      PARAMETER ( NCENOATT = -43)
      INTEGER(w2f__i4) NCENOTIN
      PARAMETER ( NCENOTIN = -38)
      INTEGER(w2f__i4) NCENOTNC
      PARAMETER ( NCENOTNC = -51)
      INTEGER(w2f__i4) NCENOTVR
      PARAMETER ( NCENOTVR = -49)
      INTEGER(w2f__i4) NCENTOOL
      PARAMETER ( NCENTOOL = -53)
      INTEGER(w2f__i4) NCEPERM
      PARAMETER ( NCEPERM = -37)
      INTEGER(w2f__i4) NCESTS
      PARAMETER ( NCESTS = -52)
      INTEGER(w2f__i4) NCEUNLIM
      PARAMETER ( NCEUNLIM = -47)
      INTEGER(w2f__i4) NCEXCL
      PARAMETER ( NCEXCL = 4)
      INTEGER(w2f__i4) NCFATAL
      PARAMETER ( NCFATAL = 1)
      INTEGER(w2f__i4) NCFILL
      PARAMETER ( NCFILL = 0)
      INTEGER(w2f__i4) NCFLOAT
      PARAMETER ( NCFLOAT = 5)
      INTEGER(w2f__i4) NCFOOBAR
      PARAMETER ( NCFOOBAR = 32)
      INTEGER(w2f__i4) NCGLOBAL
      PARAMETER ( NCGLOBAL = 0)
      INTEGER(w2f__i4) NCHDIRTY
      PARAMETER ( NCHDIRTY = 128)
      INTEGER(w2f__i4) NCHSYNC
      PARAMETER ( NCHSYNC = 32)
      INTEGER(w2f__i4) NCINDEF
      PARAMETER ( NCINDEF = 8)
      INTEGER(w2f__i4) NCLINK
      PARAMETER ( NCLINK = 32768)
      INTEGER(w2f__i4) NCLONG
      PARAMETER ( NCLONG = 4)
      INTEGER(w2f__i4) NCNDIRTY
      PARAMETER ( NCNDIRTY = 64)
      INTEGER(w2f__i4) NCNOCLOB
      PARAMETER ( NCNOCLOB = 4)
      INTEGER(w2f__i4) NCNOERR
      PARAMETER ( NCNOERR = 0)
      INTEGER(w2f__i4) NCNOFILL
      PARAMETER ( NCNOFILL = 256)
      INTEGER(w2f__i4) NCNOWRIT
      PARAMETER ( NCNOWRIT = 0)
      INTEGER(w2f__i4) NCNSYNC
      PARAMETER ( NCNSYNC = 16)
      INTEGER(w2f__i4) NCRDWR
      PARAMETER ( NCRDWR = 1)
      INTEGER(w2f__i4) NCSHORT
      PARAMETER ( NCSHORT = 3)
      INTEGER(w2f__i4) NCSYSERR
      PARAMETER ( NCSYSERR = -31)
      INTEGER(w2f__i4) NCUNLIM
      PARAMETER ( NCUNLIM = 0)
      INTEGER(w2f__i4) NCVERBOS
      PARAMETER ( NCVERBOS = 2)
      INTEGER(w2f__i4) NCWRITE
      PARAMETER ( NCWRITE = 1)
      INTEGER(w2f__i4) NF_ALIGN_CHUNK
      PARAMETER ( NF_ALIGN_CHUNK = -1)
      INTEGER(w2f__i4) NF_BYTE
      PARAMETER ( NF_BYTE = 1)
      INTEGER(w2f__i4) NF_CHAR
      PARAMETER ( NF_CHAR = 2)
      INTEGER(w2f__i4) NF_CLOBBER
      PARAMETER ( NF_CLOBBER = 0)
      EXTERNAL nf_close
      INTEGER(w2f__i4) nf_close
      INTEGER(w2f__i4) NF_DOUBLE
      PARAMETER ( NF_DOUBLE = 6)
      INTEGER(w2f__i4) NF_EBADDIM
      PARAMETER ( NF_EBADDIM = -46)
      INTEGER(w2f__i4) NF_EBADID
      PARAMETER ( NF_EBADID = -33)
      INTEGER(w2f__i4) NF_EBADNAME
      PARAMETER ( NF_EBADNAME = -59)
      INTEGER(w2f__i4) NF_EBADTYPE
      PARAMETER ( NF_EBADTYPE = -45)
      INTEGER(w2f__i4) NF_ECHAR
      PARAMETER ( NF_ECHAR = -56)
      INTEGER(w2f__i4) NF_EEDGE
      PARAMETER ( NF_EEDGE = -57)
      INTEGER(w2f__i4) NF_EEXIST
      PARAMETER ( NF_EEXIST = -35)
      INTEGER(w2f__i4) NF_EGLOBAL
      PARAMETER ( NF_EGLOBAL = -50)
      INTEGER(w2f__i4) NF_EINDEFINE
      PARAMETER ( NF_EINDEFINE = -39)
      INTEGER(w2f__i4) NF_EINVAL
      PARAMETER ( NF_EINVAL = -36)
      INTEGER(w2f__i4) NF_EINVALCOORDS
      PARAMETER ( NF_EINVALCOORDS = -40)
      INTEGER(w2f__i4) NF_EMAXATTS
      PARAMETER ( NF_EMAXATTS = -44)
      INTEGER(w2f__i4) NF_EMAXDIMS
      PARAMETER ( NF_EMAXDIMS = -41)
      INTEGER(w2f__i4) NF_EMAXNAME
      PARAMETER ( NF_EMAXNAME = -53)
      INTEGER(w2f__i4) NF_EMAXVARS
      PARAMETER ( NF_EMAXVARS = -48)
      INTEGER(w2f__i4) NF_ENAMEINUSE
      PARAMETER ( NF_ENAMEINUSE = -42)
      INTEGER(w2f__i4) NF_ENOMEM
      PARAMETER ( NF_ENOMEM = -61)
      INTEGER(w2f__i4) NF_ENORECVARS
      PARAMETER ( NF_ENORECVARS = -55)
      INTEGER(w2f__i4) NF_ENOTATT
      PARAMETER ( NF_ENOTATT = -43)
      INTEGER(w2f__i4) NF_ENOTINDEFINE
      PARAMETER ( NF_ENOTINDEFINE = -38)
      INTEGER(w2f__i4) NF_ENOTNC
      PARAMETER ( NF_ENOTNC = -51)
      INTEGER(w2f__i4) NF_ENOTVAR
      PARAMETER ( NF_ENOTVAR = -49)
      INTEGER(w2f__i4) NF_EPERM
      PARAMETER ( NF_EPERM = -37)
      INTEGER(w2f__i4) NF_ERANGE
      PARAMETER ( NF_ERANGE = -60)
      INTEGER(w2f__i4) NF_ESTRIDE
      PARAMETER ( NF_ESTRIDE = -58)
      INTEGER(w2f__i4) NF_ESTS
      PARAMETER ( NF_ESTS = -52)
      INTEGER(w2f__i4) NF_EUNLIMIT
      PARAMETER ( NF_EUNLIMIT = -54)
      INTEGER(w2f__i4) NF_EUNLIMPOS
      PARAMETER ( NF_EUNLIMPOS = -47)
      INTEGER(w2f__i4) NF_FATAL
      PARAMETER ( NF_FATAL = 1)
      INTEGER(w2f__i4) NF_FILL
      PARAMETER ( NF_FILL = 0)
      INTEGER(w2f__i4) NF_FILL_BYTE
      PARAMETER ( NF_FILL_BYTE = -127)
      INTEGER(w2f__i4) NF_FILL_CHAR
      PARAMETER ( NF_FILL_CHAR = 0)
      REAL(w2f__8) NF_FILL_DOUBLE
      PARAMETER ( NF_FILL_DOUBLE = 9.969209968386869d+36)
      REAL(w2f__4) NF_FILL_FLOAT
      PARAMETER ( NF_FILL_FLOAT = 9.969210d+36)
      INTEGER(w2f__i4) NF_FILL_INT
      PARAMETER ( NF_FILL_INT = -2147483647)
      INTEGER(w2f__i4) NF_FILL_INT1
      PARAMETER ( NF_FILL_INT1 = -127)
      INTEGER(w2f__i4) NF_FILL_INT2
      PARAMETER ( NF_FILL_INT2 = -32767)
      REAL(w2f__4) NF_FILL_REAL
      PARAMETER ( NF_FILL_REAL = 9.969210d+36)
      INTEGER(w2f__i4) NF_FILL_SHORT
      PARAMETER ( NF_FILL_SHORT = -32767)
      INTEGER(w2f__i4) NF_FLOAT
      PARAMETER ( NF_FLOAT = 5)
      INTEGER(w2f__i4) NF_GLOBAL
      PARAMETER ( NF_GLOBAL = 0)
      EXTERNAL nf_inq_varid
      INTEGER(w2f__i4) nf_inq_varid
      INTEGER(w2f__i4) NF_INT
      PARAMETER ( NF_INT = 4)
      INTEGER(w2f__i4) NF_INT1
      PARAMETER ( NF_INT1 = 1)
      INTEGER(w2f__i4) NF_INT2
      PARAMETER ( NF_INT2 = 3)
      INTEGER(w2f__i4) NF_LOCK
      PARAMETER ( NF_LOCK = 1024)
      INTEGER(w2f__i4) NF_MAX_ATTRS
      PARAMETER ( NF_MAX_ATTRS = 4096)
      INTEGER(w2f__i4) NF_MAX_DIMS
      PARAMETER ( NF_MAX_DIMS = 512)
      INTEGER(w2f__i4) NF_MAX_NAME
      PARAMETER ( NF_MAX_NAME = 128)
      INTEGER(w2f__i4) NF_MAX_VARS
      PARAMETER ( NF_MAX_VARS = 4096)
      INTEGER(w2f__i4) NF_MAX_VAR_DIMS
      PARAMETER ( NF_MAX_VAR_DIMS = 512)
      INTEGER(w2f__i4) NF_NOCLOBBER
      PARAMETER ( NF_NOCLOBBER = 4)
      INTEGER(w2f__i4) NF_NOERR
      PARAMETER ( NF_NOERR = 0)
      INTEGER(w2f__i4) NF_NOFILL
      PARAMETER ( NF_NOFILL = 256)
      INTEGER(w2f__i4) NF_NOWRITE
      PARAMETER ( NF_NOWRITE = 0)
      EXTERNAL nf_open
      INTEGER(w2f__i4) nf_open
      EXTERNAL nf_put_vara_double
      INTEGER(w2f__i4) nf_put_vara_double
      EXTERNAL nf_put_vara_double_ad2
      INTEGER(w2f__i4) nf_put_vara_double_ad2
      INTEGER(w2f__i4) NF_REAL
      PARAMETER ( NF_REAL = 5)
      INTEGER(w2f__i4) NF_SHARE
      PARAMETER ( NF_SHARE = 2048)
      INTEGER(w2f__i4) NF_SHORT
      PARAMETER ( NF_SHORT = 3)
      INTEGER(w2f__i4) NF_SIZEHINT_DEFAULT
      PARAMETER ( NF_SIZEHINT_DEFAULT = 0)
      INTEGER(w2f__i4) NF_UNLIMITED
      PARAMETER ( NF_UNLIMITED = 0)
      INTEGER(w2f__i4) NF_VERBOSE
      PARAMETER ( NF_VERBOSE = 2)
      INTEGER(w2f__i4) NF_WRITE
      PARAMETER ( NF_WRITE = 1)
      INTEGER(w2f__i4) START(1 : 3)
      CHARACTER(80) STR1
      INTEGER(w2f__i4) UID
      INTEGER(w2f__i8) t__69
      INTEGER(w2f__i8) t__71
C
C     **** statements ****
C
      t__66 = NX
      t__67 = NY
      t__68 = MAX(t__66, 0_w2f__i8)
      t__69 = t__68
      t__70 = MAX(t__67, 0_w2f__i8)
      t__71 = t__68 * t__70
      START(1) = 1
      START(2) = 1
      START(3) = IT
      COUNT(1) = NX
      COUNT(2) = NY
      COUNT(3) = 1
      ERRMSG = nf_open(FNAME, (1), FID)
      STR1 = 'nf_open'
      CALL handle_err(ERRMSG, STR1)
      ERRMSG = nf_inq_varid(FID, UNAME, UID)
      STR1 = 'nf_inq_varid: ' // UNAME
      CALL handle_err(ERRMSG, STR1)
      IF(UNAME .EQ. 'TIME') THEN
        ERRMSG = nf_put_vara_double(FID, UID, IT, (1), U(1, 1))
      ELSE
        ERRMSG = nf_put_vara_double_ad2(FID, UID, START, COUNT, U, NX,
     >  NY)
      ENDIF
      STR1 = 'nf_put_vara_double: ' // UNAME
      CALL handle_err(ERRMSG, STR1)
      ERRMSG = nf_close(FID)
      STR1 = 'nf_close'
      CALL handle_err(ERRMSG, STR1)
      RETURN
      END SUBROUTINE

      SUBROUTINE read_vector_netcdf(FNAME, ANAME, N, A)
      use w2f__types
      use active_module
      IMPLICIT NONE
C
C     **** Parameters and Result ****
C
      CHARACTER(80) FNAME
      CHARACTER(80) ANAME
      INTEGER(w2f__i4) N
      type(active) :: A(1 : N)
C
C     **** Local Variables and functions ****
C
      INTEGER(w2f__i8) t__72
      INTEGER(w2f__i8) t__73
      INTEGER(w2f__i4) AID
      INTEGER(w2f__i4) ERRMSG
      INTEGER(w2f__i4) FID
      INTEGER(w2f__i4) FILBYTE
      PARAMETER ( FILBYTE = -127)
      INTEGER(w2f__i4) FILCHAR
      PARAMETER ( FILCHAR = 0)
      REAL(w2f__8) FILDOUB
      PARAMETER ( FILDOUB = 9.969209968386869d+36)
      REAL(w2f__4) FILFLOAT
      PARAMETER ( FILFLOAT = 9.969210d+36)
      INTEGER(w2f__i4) FILLONG
      PARAMETER ( FILLONG = -2147483647)
      INTEGER(w2f__i4) FILSHORT
      PARAMETER ( FILSHORT = -32767)
      EXTERNAL handle_err
      INTEGER(w2f__i4) K
      INTEGER(w2f__i4) MAXNCATT
      PARAMETER ( MAXNCATT = 2000)
      INTEGER(w2f__i4) MAXNCDIM
      PARAMETER ( MAXNCDIM = 100)
      INTEGER(w2f__i4) MAXNCNAM
      PARAMETER ( MAXNCNAM = 128)
      INTEGER(w2f__i4) MAXNCOP
      PARAMETER ( MAXNCOP = 32)
      INTEGER(w2f__i4) MAXNCVAR
      PARAMETER ( MAXNCVAR = 2000)
      INTEGER(w2f__i4) MAXVDIMS
      PARAMETER ( MAXVDIMS = 100)
      INTEGER(w2f__i4) NCBYTE
      PARAMETER ( NCBYTE = 1)
      INTEGER(w2f__i4) NCCHAR
      PARAMETER ( NCCHAR = 2)
      INTEGER(w2f__i4) NCCLOB
      PARAMETER ( NCCLOB = 0)
      INTEGER(w2f__i4) NCCREAT
      PARAMETER ( NCCREAT = 2)
      INTEGER(w2f__i4) NCDOUBLE
      PARAMETER ( NCDOUBLE = 6)
      INTEGER(w2f__i4) NCEBADD
      PARAMETER ( NCEBADD = -46)
      INTEGER(w2f__i4) NCEBADID
      PARAMETER ( NCEBADID = -33)
      INTEGER(w2f__i4) NCEBADTY
      PARAMETER ( NCEBADTY = -45)
      INTEGER(w2f__i4) NCECOORD
      PARAMETER ( NCECOORD = -40)
      INTEGER(w2f__i4) NCEEXIST
      PARAMETER ( NCEEXIST = -35)
      INTEGER(w2f__i4) NCEGLOB
      PARAMETER ( NCEGLOB = -50)
      INTEGER(w2f__i4) NCEINDEF
      PARAMETER ( NCEINDEF = -39)
      INTEGER(w2f__i4) NCEINVAL
      PARAMETER ( NCEINVAL = -36)
      INTEGER(w2f__i4) NCEMAXAT
      PARAMETER ( NCEMAXAT = -44)
      INTEGER(w2f__i4) NCEMAXDS
      PARAMETER ( NCEMAXDS = -41)
      INTEGER(w2f__i4) NCEMAXVS
      PARAMETER ( NCEMAXVS = -48)
      INTEGER(w2f__i4) NCENAME
      PARAMETER ( NCENAME = -42)
      INTEGER(w2f__i4) NCENFILE
      PARAMETER ( NCENFILE = -31)
      INTEGER(w2f__i4) NCENOATT
      PARAMETER ( NCENOATT = -43)
      INTEGER(w2f__i4) NCENOTIN
      PARAMETER ( NCENOTIN = -38)
      INTEGER(w2f__i4) NCENOTNC
      PARAMETER ( NCENOTNC = -51)
      INTEGER(w2f__i4) NCENOTVR
      PARAMETER ( NCENOTVR = -49)
      INTEGER(w2f__i4) NCENTOOL
      PARAMETER ( NCENTOOL = -53)
      INTEGER(w2f__i4) NCEPERM
      PARAMETER ( NCEPERM = -37)
      INTEGER(w2f__i4) NCESTS
      PARAMETER ( NCESTS = -52)
      INTEGER(w2f__i4) NCEUNLIM
      PARAMETER ( NCEUNLIM = -47)
      INTEGER(w2f__i4) NCEXCL
      PARAMETER ( NCEXCL = 4)
      INTEGER(w2f__i4) NCFATAL
      PARAMETER ( NCFATAL = 1)
      INTEGER(w2f__i4) NCFILL
      PARAMETER ( NCFILL = 0)
      INTEGER(w2f__i4) NCFLOAT
      PARAMETER ( NCFLOAT = 5)
      INTEGER(w2f__i4) NCFOOBAR
      PARAMETER ( NCFOOBAR = 32)
      INTEGER(w2f__i4) NCGLOBAL
      PARAMETER ( NCGLOBAL = 0)
      INTEGER(w2f__i4) NCHDIRTY
      PARAMETER ( NCHDIRTY = 128)
      INTEGER(w2f__i4) NCHSYNC
      PARAMETER ( NCHSYNC = 32)
      INTEGER(w2f__i4) NCINDEF
      PARAMETER ( NCINDEF = 8)
      INTEGER(w2f__i4) NCLINK
      PARAMETER ( NCLINK = 32768)
      INTEGER(w2f__i4) NCLONG
      PARAMETER ( NCLONG = 4)
      INTEGER(w2f__i4) NCNDIRTY
      PARAMETER ( NCNDIRTY = 64)
      INTEGER(w2f__i4) NCNOCLOB
      PARAMETER ( NCNOCLOB = 4)
      INTEGER(w2f__i4) NCNOERR
      PARAMETER ( NCNOERR = 0)
      INTEGER(w2f__i4) NCNOFILL
      PARAMETER ( NCNOFILL = 256)
      INTEGER(w2f__i4) NCNOWRIT
      PARAMETER ( NCNOWRIT = 0)
      INTEGER(w2f__i4) NCNSYNC
      PARAMETER ( NCNSYNC = 16)
      INTEGER(w2f__i4) NCRDWR
      PARAMETER ( NCRDWR = 1)
      INTEGER(w2f__i4) NCSHORT
      PARAMETER ( NCSHORT = 3)
      INTEGER(w2f__i4) NCSYSERR
      PARAMETER ( NCSYSERR = -31)
      INTEGER(w2f__i4) NCUNLIM
      PARAMETER ( NCUNLIM = 0)
      INTEGER(w2f__i4) NCVERBOS
      PARAMETER ( NCVERBOS = 2)
      INTEGER(w2f__i4) NCWRITE
      PARAMETER ( NCWRITE = 1)
      INTEGER(w2f__i4) NF_ALIGN_CHUNK
      PARAMETER ( NF_ALIGN_CHUNK = -1)
      INTEGER(w2f__i4) NF_BYTE
      PARAMETER ( NF_BYTE = 1)
      INTEGER(w2f__i4) NF_CHAR
      PARAMETER ( NF_CHAR = 2)
      INTEGER(w2f__i4) NF_CLOBBER
      PARAMETER ( NF_CLOBBER = 0)
      EXTERNAL nf_close
      INTEGER(w2f__i4) nf_close
      INTEGER(w2f__i4) NF_DOUBLE
      PARAMETER ( NF_DOUBLE = 6)
      INTEGER(w2f__i4) NF_EBADDIM
      PARAMETER ( NF_EBADDIM = -46)
      INTEGER(w2f__i4) NF_EBADID
      PARAMETER ( NF_EBADID = -33)
      INTEGER(w2f__i4) NF_EBADNAME
      PARAMETER ( NF_EBADNAME = -59)
      INTEGER(w2f__i4) NF_EBADTYPE
      PARAMETER ( NF_EBADTYPE = -45)
      INTEGER(w2f__i4) NF_ECHAR
      PARAMETER ( NF_ECHAR = -56)
      INTEGER(w2f__i4) NF_EEDGE
      PARAMETER ( NF_EEDGE = -57)
      INTEGER(w2f__i4) NF_EEXIST
      PARAMETER ( NF_EEXIST = -35)
      INTEGER(w2f__i4) NF_EGLOBAL
      PARAMETER ( NF_EGLOBAL = -50)
      INTEGER(w2f__i4) NF_EINDEFINE
      PARAMETER ( NF_EINDEFINE = -39)
      INTEGER(w2f__i4) NF_EINVAL
      PARAMETER ( NF_EINVAL = -36)
      INTEGER(w2f__i4) NF_EINVALCOORDS
      PARAMETER ( NF_EINVALCOORDS = -40)
      INTEGER(w2f__i4) NF_EMAXATTS
      PARAMETER ( NF_EMAXATTS = -44)
      INTEGER(w2f__i4) NF_EMAXDIMS
      PARAMETER ( NF_EMAXDIMS = -41)
      INTEGER(w2f__i4) NF_EMAXNAME
      PARAMETER ( NF_EMAXNAME = -53)
      INTEGER(w2f__i4) NF_EMAXVARS
      PARAMETER ( NF_EMAXVARS = -48)
      INTEGER(w2f__i4) NF_ENAMEINUSE
      PARAMETER ( NF_ENAMEINUSE = -42)
      INTEGER(w2f__i4) NF_ENOMEM
      PARAMETER ( NF_ENOMEM = -61)
      INTEGER(w2f__i4) NF_ENORECVARS
      PARAMETER ( NF_ENORECVARS = -55)
      INTEGER(w2f__i4) NF_ENOTATT
      PARAMETER ( NF_ENOTATT = -43)
      INTEGER(w2f__i4) NF_ENOTINDEFINE
      PARAMETER ( NF_ENOTINDEFINE = -38)
      INTEGER(w2f__i4) NF_ENOTNC
      PARAMETER ( NF_ENOTNC = -51)
      INTEGER(w2f__i4) NF_ENOTVAR
      PARAMETER ( NF_ENOTVAR = -49)
      INTEGER(w2f__i4) NF_EPERM
      PARAMETER ( NF_EPERM = -37)
      INTEGER(w2f__i4) NF_ERANGE
      PARAMETER ( NF_ERANGE = -60)
      INTEGER(w2f__i4) NF_ESTRIDE
      PARAMETER ( NF_ESTRIDE = -58)
      INTEGER(w2f__i4) NF_ESTS
      PARAMETER ( NF_ESTS = -52)
      INTEGER(w2f__i4) NF_EUNLIMIT
      PARAMETER ( NF_EUNLIMIT = -54)
      INTEGER(w2f__i4) NF_EUNLIMPOS
      PARAMETER ( NF_EUNLIMPOS = -47)
      INTEGER(w2f__i4) NF_FATAL
      PARAMETER ( NF_FATAL = 1)
      INTEGER(w2f__i4) NF_FILL
      PARAMETER ( NF_FILL = 0)
      INTEGER(w2f__i4) NF_FILL_BYTE
      PARAMETER ( NF_FILL_BYTE = -127)
      INTEGER(w2f__i4) NF_FILL_CHAR
      PARAMETER ( NF_FILL_CHAR = 0)
      REAL(w2f__8) NF_FILL_DOUBLE
      PARAMETER ( NF_FILL_DOUBLE = 9.969209968386869d+36)
      REAL(w2f__4) NF_FILL_FLOAT
      PARAMETER ( NF_FILL_FLOAT = 9.969210d+36)
      INTEGER(w2f__i4) NF_FILL_INT
      PARAMETER ( NF_FILL_INT = -2147483647)
      INTEGER(w2f__i4) NF_FILL_INT1
      PARAMETER ( NF_FILL_INT1 = -127)
      INTEGER(w2f__i4) NF_FILL_INT2
      PARAMETER ( NF_FILL_INT2 = -32767)
      REAL(w2f__4) NF_FILL_REAL
      PARAMETER ( NF_FILL_REAL = 9.969210d+36)
      INTEGER(w2f__i4) NF_FILL_SHORT
      PARAMETER ( NF_FILL_SHORT = -32767)
      INTEGER(w2f__i4) NF_FLOAT
      PARAMETER ( NF_FLOAT = 5)
      EXTERNAL nf_get_var_double_ad1
      INTEGER(w2f__i4) nf_get_var_double_ad1
      INTEGER(w2f__i4) NF_GLOBAL
      PARAMETER ( NF_GLOBAL = 0)
      EXTERNAL nf_inq_varid
      INTEGER(w2f__i4) nf_inq_varid
      INTEGER(w2f__i4) NF_INT
      PARAMETER ( NF_INT = 4)
      INTEGER(w2f__i4) NF_INT1
      PARAMETER ( NF_INT1 = 1)
      INTEGER(w2f__i4) NF_INT2
      PARAMETER ( NF_INT2 = 3)
      INTEGER(w2f__i4) NF_LOCK
      PARAMETER ( NF_LOCK = 1024)
      INTEGER(w2f__i4) NF_MAX_ATTRS
      PARAMETER ( NF_MAX_ATTRS = 4096)
      INTEGER(w2f__i4) NF_MAX_DIMS
      PARAMETER ( NF_MAX_DIMS = 512)
      INTEGER(w2f__i4) NF_MAX_NAME
      PARAMETER ( NF_MAX_NAME = 128)
      INTEGER(w2f__i4) NF_MAX_VARS
      PARAMETER ( NF_MAX_VARS = 4096)
      INTEGER(w2f__i4) NF_MAX_VAR_DIMS
      PARAMETER ( NF_MAX_VAR_DIMS = 512)
      INTEGER(w2f__i4) NF_NOCLOBBER
      PARAMETER ( NF_NOCLOBBER = 4)
      INTEGER(w2f__i4) NF_NOERR
      PARAMETER ( NF_NOERR = 0)
      INTEGER(w2f__i4) NF_NOFILL
      PARAMETER ( NF_NOFILL = 256)
      INTEGER(w2f__i4) NF_NOWRITE
      PARAMETER ( NF_NOWRITE = 0)
      EXTERNAL nf_open
      INTEGER(w2f__i4) nf_open
      INTEGER(w2f__i4) NF_REAL
      PARAMETER ( NF_REAL = 5)
      INTEGER(w2f__i4) NF_SHARE
      PARAMETER ( NF_SHARE = 2048)
      INTEGER(w2f__i4) NF_SHORT
      PARAMETER ( NF_SHORT = 3)
      INTEGER(w2f__i4) NF_SIZEHINT_DEFAULT
      PARAMETER ( NF_SIZEHINT_DEFAULT = 0)
      INTEGER(w2f__i4) NF_UNLIMITED
      PARAMETER ( NF_UNLIMITED = 0)
      INTEGER(w2f__i4) NF_VERBOSE
      PARAMETER ( NF_VERBOSE = 2)
      INTEGER(w2f__i4) NF_WRITE
      PARAMETER ( NF_WRITE = 1)
      CHARACTER(80) STR1
C
C     **** Temporary variables ****
C
      INTEGER(w2f__i4) doloop_ub
C
C     **** statements ****
C
      t__72 = N
      t__73 = MAX(t__72, 0_w2f__i8)
      ERRMSG = nf_open(FNAME, (0), FID)
      STR1 = 'nf_open'
      CALL handle_err(ERRMSG, STR1)
      ERRMSG = nf_inq_varid(FID, ANAME, AID)
      IF(ERRMSG .eq. INT((-49_w2f__i8))) THEN
        WRITE(*, *) 'variable "' // ANAME // '" not found in ' // FNAME
        WRITE(*, *) 'set to zero'
        doloop_ub = N
        DO K = 1, doloop_ub, 1
          A(INT(K))%v = 0.0D00
          CALL zero_deriv(A(INT(K)))
        END DO
      ELSE
        STR1 = 'nf_inq_varid: ' // ANAME
        CALL handle_err(ERRMSG, STR1)
        ERRMSG = nf_get_var_double_ad1(FID, AID, A, N)
        STR1 = 'nf_get_var_double: ' // ANAME
        CALL handle_err(ERRMSG, STR1)
      ENDIF
      ERRMSG = nf_close(FID)
      STR1 = 'nf_close'
      CALL handle_err(ERRMSG, STR1)
      RETURN
      END SUBROUTINE

      SUBROUTINE read_field_netcdf(FNAME, ANAME, NX, NY, A)
      use w2f__types
      use active_module
      IMPLICIT NONE
C
C     **** Parameters and Result ****
C
      CHARACTER(80) FNAME
      CHARACTER(80) ANAME
      INTEGER(w2f__i4) NX
      INTEGER(w2f__i4) NY
      type(active) :: A(1 : NX, 1 : NY)
C
C     **** Local Variables and functions ****
C
      INTEGER(w2f__i8) t__74
      INTEGER(w2f__i8) t__76
      INTEGER(w2f__i8) t__75
      INTEGER(w2f__i8) t__78
      INTEGER(w2f__i4) AID
      INTEGER(w2f__i4) DIMLEN
      INTEGER(w2f__i4) ERRMSG
      INTEGER(w2f__i4) FID
      INTEGER(w2f__i4) FILBYTE
      PARAMETER ( FILBYTE = -127)
      INTEGER(w2f__i4) FILCHAR
      PARAMETER ( FILCHAR = 0)
      REAL(w2f__8) FILDOUB
      PARAMETER ( FILDOUB = 9.969209968386869d+36)
      REAL(w2f__4) FILFLOAT
      PARAMETER ( FILFLOAT = 9.969210d+36)
      INTEGER(w2f__i4) FILLONG
      PARAMETER ( FILLONG = -2147483647)
      INTEGER(w2f__i4) FILSHORT
      PARAMETER ( FILSHORT = -32767)
      EXTERNAL handle_err
      INTEGER(w2f__i4) IX
      INTEGER(w2f__i4) IY
      EXTERNAL lastchar
      INTEGER(w2f__i4) lastchar
      INTEGER(w2f__i4) LCHAR
      INTEGER(w2f__i4) MAXNCATT
      PARAMETER ( MAXNCATT = 2000)
      INTEGER(w2f__i4) MAXNCDIM
      PARAMETER ( MAXNCDIM = 100)
      INTEGER(w2f__i4) MAXNCNAM
      PARAMETER ( MAXNCNAM = 128)
      INTEGER(w2f__i4) MAXNCOP
      PARAMETER ( MAXNCOP = 32)
      INTEGER(w2f__i4) MAXNCVAR
      PARAMETER ( MAXNCVAR = 2000)
      INTEGER(w2f__i4) MAXVDIMS
      PARAMETER ( MAXVDIMS = 100)
      INTEGER(w2f__i4) NCBYTE
      PARAMETER ( NCBYTE = 1)
      INTEGER(w2f__i4) NCCHAR
      PARAMETER ( NCCHAR = 2)
      INTEGER(w2f__i4) NCCLOB
      PARAMETER ( NCCLOB = 0)
      INTEGER(w2f__i4) NCCREAT
      PARAMETER ( NCCREAT = 2)
      INTEGER(w2f__i4) NCDOUBLE
      PARAMETER ( NCDOUBLE = 6)
      INTEGER(w2f__i4) NCEBADD
      PARAMETER ( NCEBADD = -46)
      INTEGER(w2f__i4) NCEBADID
      PARAMETER ( NCEBADID = -33)
      INTEGER(w2f__i4) NCEBADTY
      PARAMETER ( NCEBADTY = -45)
      INTEGER(w2f__i4) NCECOORD
      PARAMETER ( NCECOORD = -40)
      INTEGER(w2f__i4) NCEEXIST
      PARAMETER ( NCEEXIST = -35)
      INTEGER(w2f__i4) NCEGLOB
      PARAMETER ( NCEGLOB = -50)
      INTEGER(w2f__i4) NCEINDEF
      PARAMETER ( NCEINDEF = -39)
      INTEGER(w2f__i4) NCEINVAL
      PARAMETER ( NCEINVAL = -36)
      INTEGER(w2f__i4) NCEMAXAT
      PARAMETER ( NCEMAXAT = -44)
      INTEGER(w2f__i4) NCEMAXDS
      PARAMETER ( NCEMAXDS = -41)
      INTEGER(w2f__i4) NCEMAXVS
      PARAMETER ( NCEMAXVS = -48)
      INTEGER(w2f__i4) NCENAME
      PARAMETER ( NCENAME = -42)
      INTEGER(w2f__i4) NCENFILE
      PARAMETER ( NCENFILE = -31)
      INTEGER(w2f__i4) NCENOATT
      PARAMETER ( NCENOATT = -43)
      INTEGER(w2f__i4) NCENOTIN
      PARAMETER ( NCENOTIN = -38)
      INTEGER(w2f__i4) NCENOTNC
      PARAMETER ( NCENOTNC = -51)
      INTEGER(w2f__i4) NCENOTVR
      PARAMETER ( NCENOTVR = -49)
      INTEGER(w2f__i4) NCENTOOL
      PARAMETER ( NCENTOOL = -53)
      INTEGER(w2f__i4) NCEPERM
      PARAMETER ( NCEPERM = -37)
      INTEGER(w2f__i4) NCESTS
      PARAMETER ( NCESTS = -52)
      INTEGER(w2f__i4) NCEUNLIM
      PARAMETER ( NCEUNLIM = -47)
      INTEGER(w2f__i4) NCEXCL
      PARAMETER ( NCEXCL = 4)
      INTEGER(w2f__i4) NCFATAL
      PARAMETER ( NCFATAL = 1)
      INTEGER(w2f__i4) NCFILL
      PARAMETER ( NCFILL = 0)
      INTEGER(w2f__i4) NCFLOAT
      PARAMETER ( NCFLOAT = 5)
      INTEGER(w2f__i4) NCFOOBAR
      PARAMETER ( NCFOOBAR = 32)
      INTEGER(w2f__i4) NCGLOBAL
      PARAMETER ( NCGLOBAL = 0)
      INTEGER(w2f__i4) NCHDIRTY
      PARAMETER ( NCHDIRTY = 128)
      INTEGER(w2f__i4) NCHSYNC
      PARAMETER ( NCHSYNC = 32)
      INTEGER(w2f__i4) NCINDEF
      PARAMETER ( NCINDEF = 8)
      INTEGER(w2f__i4) NCLINK
      PARAMETER ( NCLINK = 32768)
      INTEGER(w2f__i4) NCLONG
      PARAMETER ( NCLONG = 4)
      INTEGER(w2f__i4) NCNDIRTY
      PARAMETER ( NCNDIRTY = 64)
      INTEGER(w2f__i4) NCNOCLOB
      PARAMETER ( NCNOCLOB = 4)
      INTEGER(w2f__i4) NCNOERR
      PARAMETER ( NCNOERR = 0)
      INTEGER(w2f__i4) NCNOFILL
      PARAMETER ( NCNOFILL = 256)
      INTEGER(w2f__i4) NCNOWRIT
      PARAMETER ( NCNOWRIT = 0)
      INTEGER(w2f__i4) NCNSYNC
      PARAMETER ( NCNSYNC = 16)
      INTEGER(w2f__i4) NCRDWR
      PARAMETER ( NCRDWR = 1)
      INTEGER(w2f__i4) NCSHORT
      PARAMETER ( NCSHORT = 3)
      INTEGER(w2f__i4) NCSYSERR
      PARAMETER ( NCSYSERR = -31)
      INTEGER(w2f__i4) NCUNLIM
      PARAMETER ( NCUNLIM = 0)
      INTEGER(w2f__i4) NCVERBOS
      PARAMETER ( NCVERBOS = 2)
      INTEGER(w2f__i4) NCWRITE
      PARAMETER ( NCWRITE = 1)
      INTEGER(w2f__i4) NDIMS
      INTEGER(w2f__i4) NF_ALIGN_CHUNK
      PARAMETER ( NF_ALIGN_CHUNK = -1)
      INTEGER(w2f__i4) NF_BYTE
      PARAMETER ( NF_BYTE = 1)
      INTEGER(w2f__i4) NF_CHAR
      PARAMETER ( NF_CHAR = 2)
      INTEGER(w2f__i4) NF_CLOBBER
      PARAMETER ( NF_CLOBBER = 0)
      EXTERNAL nf_close
      INTEGER(w2f__i4) nf_close
      INTEGER(w2f__i4) NF_DOUBLE
      PARAMETER ( NF_DOUBLE = 6)
      INTEGER(w2f__i4) NF_EBADDIM
      PARAMETER ( NF_EBADDIM = -46)
      INTEGER(w2f__i4) NF_EBADID
      PARAMETER ( NF_EBADID = -33)
      INTEGER(w2f__i4) NF_EBADNAME
      PARAMETER ( NF_EBADNAME = -59)
      INTEGER(w2f__i4) NF_EBADTYPE
      PARAMETER ( NF_EBADTYPE = -45)
      INTEGER(w2f__i4) NF_ECHAR
      PARAMETER ( NF_ECHAR = -56)
      INTEGER(w2f__i4) NF_EEDGE
      PARAMETER ( NF_EEDGE = -57)
      INTEGER(w2f__i4) NF_EEXIST
      PARAMETER ( NF_EEXIST = -35)
      INTEGER(w2f__i4) NF_EGLOBAL
      PARAMETER ( NF_EGLOBAL = -50)
      INTEGER(w2f__i4) NF_EINDEFINE
      PARAMETER ( NF_EINDEFINE = -39)
      INTEGER(w2f__i4) NF_EINVAL
      PARAMETER ( NF_EINVAL = -36)
      INTEGER(w2f__i4) NF_EINVALCOORDS
      PARAMETER ( NF_EINVALCOORDS = -40)
      INTEGER(w2f__i4) NF_EMAXATTS
      PARAMETER ( NF_EMAXATTS = -44)
      INTEGER(w2f__i4) NF_EMAXDIMS
      PARAMETER ( NF_EMAXDIMS = -41)
      INTEGER(w2f__i4) NF_EMAXNAME
      PARAMETER ( NF_EMAXNAME = -53)
      INTEGER(w2f__i4) NF_EMAXVARS
      PARAMETER ( NF_EMAXVARS = -48)
      INTEGER(w2f__i4) NF_ENAMEINUSE
      PARAMETER ( NF_ENAMEINUSE = -42)
      INTEGER(w2f__i4) NF_ENOMEM
      PARAMETER ( NF_ENOMEM = -61)
      INTEGER(w2f__i4) NF_ENORECVARS
      PARAMETER ( NF_ENORECVARS = -55)
      INTEGER(w2f__i4) NF_ENOTATT
      PARAMETER ( NF_ENOTATT = -43)
      INTEGER(w2f__i4) NF_ENOTINDEFINE
      PARAMETER ( NF_ENOTINDEFINE = -38)
      INTEGER(w2f__i4) NF_ENOTNC
      PARAMETER ( NF_ENOTNC = -51)
      INTEGER(w2f__i4) NF_ENOTVAR
      PARAMETER ( NF_ENOTVAR = -49)
      INTEGER(w2f__i4) NF_EPERM
      PARAMETER ( NF_EPERM = -37)
      INTEGER(w2f__i4) NF_ERANGE
      PARAMETER ( NF_ERANGE = -60)
      INTEGER(w2f__i4) NF_ESTRIDE
      PARAMETER ( NF_ESTRIDE = -58)
      INTEGER(w2f__i4) NF_ESTS
      PARAMETER ( NF_ESTS = -52)
      INTEGER(w2f__i4) NF_EUNLIMIT
      PARAMETER ( NF_EUNLIMIT = -54)
      INTEGER(w2f__i4) NF_EUNLIMPOS
      PARAMETER ( NF_EUNLIMPOS = -47)
      INTEGER(w2f__i4) NF_FATAL
      PARAMETER ( NF_FATAL = 1)
      INTEGER(w2f__i4) NF_FILL
      PARAMETER ( NF_FILL = 0)
      INTEGER(w2f__i4) NF_FILL_BYTE
      PARAMETER ( NF_FILL_BYTE = -127)
      INTEGER(w2f__i4) NF_FILL_CHAR
      PARAMETER ( NF_FILL_CHAR = 0)
      REAL(w2f__8) NF_FILL_DOUBLE
      PARAMETER ( NF_FILL_DOUBLE = 9.969209968386869d+36)
      REAL(w2f__4) NF_FILL_FLOAT
      PARAMETER ( NF_FILL_FLOAT = 9.969210d+36)
      INTEGER(w2f__i4) NF_FILL_INT
      PARAMETER ( NF_FILL_INT = -2147483647)
      INTEGER(w2f__i4) NF_FILL_INT1
      PARAMETER ( NF_FILL_INT1 = -127)
      INTEGER(w2f__i4) NF_FILL_INT2
      PARAMETER ( NF_FILL_INT2 = -32767)
      REAL(w2f__4) NF_FILL_REAL
      PARAMETER ( NF_FILL_REAL = 9.969210d+36)
      INTEGER(w2f__i4) NF_FILL_SHORT
      PARAMETER ( NF_FILL_SHORT = -32767)
      INTEGER(w2f__i4) NF_FLOAT
      PARAMETER ( NF_FLOAT = 5)
      EXTERNAL nf_get_var_double_ad2
      INTEGER(w2f__i4) nf_get_var_double_ad2
      INTEGER(w2f__i4) NF_GLOBAL
      PARAMETER ( NF_GLOBAL = 0)
      EXTERNAL nf_inq_dimlen
      INTEGER(w2f__i4) nf_inq_dimlen
      EXTERNAL nf_inq_varid
      INTEGER(w2f__i4) nf_inq_varid
      EXTERNAL nf_inq_varndims
      INTEGER(w2f__i4) nf_inq_varndims
      INTEGER(w2f__i4) NF_INT
      PARAMETER ( NF_INT = 4)
      INTEGER(w2f__i4) NF_INT1
      PARAMETER ( NF_INT1 = 1)
      INTEGER(w2f__i4) NF_INT2
      PARAMETER ( NF_INT2 = 3)
      INTEGER(w2f__i4) NF_LOCK
      PARAMETER ( NF_LOCK = 1024)
      INTEGER(w2f__i4) NF_MAX_ATTRS
      PARAMETER ( NF_MAX_ATTRS = 4096)
      INTEGER(w2f__i4) NF_MAX_DIMS
      PARAMETER ( NF_MAX_DIMS = 512)
      INTEGER(w2f__i4) NF_MAX_NAME
      PARAMETER ( NF_MAX_NAME = 128)
      INTEGER(w2f__i4) NF_MAX_VARS
      PARAMETER ( NF_MAX_VARS = 4096)
      INTEGER(w2f__i4) NF_MAX_VAR_DIMS
      PARAMETER ( NF_MAX_VAR_DIMS = 512)
      INTEGER(w2f__i4) NF_NOCLOBBER
      PARAMETER ( NF_NOCLOBBER = 4)
      INTEGER(w2f__i4) NF_NOERR
      PARAMETER ( NF_NOERR = 0)
      INTEGER(w2f__i4) NF_NOFILL
      PARAMETER ( NF_NOFILL = 256)
      INTEGER(w2f__i4) NF_NOWRITE
      PARAMETER ( NF_NOWRITE = 0)
      EXTERNAL nf_open
      INTEGER(w2f__i4) nf_open
      INTEGER(w2f__i4) NF_REAL
      PARAMETER ( NF_REAL = 5)
      INTEGER(w2f__i4) NF_SHARE
      PARAMETER ( NF_SHARE = 2048)
      INTEGER(w2f__i4) NF_SHORT
      PARAMETER ( NF_SHORT = 3)
      INTEGER(w2f__i4) NF_SIZEHINT_DEFAULT
      PARAMETER ( NF_SIZEHINT_DEFAULT = 0)
      INTEGER(w2f__i4) NF_UNLIMITED
      PARAMETER ( NF_UNLIMITED = 0)
      INTEGER(w2f__i4) NF_VERBOSE
      PARAMETER ( NF_VERBOSE = 2)
      INTEGER(w2f__i4) NF_WRITE
      PARAMETER ( NF_WRITE = 1)
      CHARACTER(80) STRBOGUS
      INTEGER(w2f__i8) t__77
      INTEGER(w2f__i8) t__79
C
C     **** Temporary variables ****
C
      INTEGER(w2f__i4) doloop_ub
      INTEGER(w2f__i4) doloop_ub0
      INTEGER(w2f__i4) doloop_ub1
      INTEGER(w2f__i4) doloop_ub2
C
C     **** statements ****
C
      t__74 = NX
      t__75 = NY
      t__76 = MAX(t__74, 0_w2f__i8)
      t__77 = t__76
      t__78 = MAX(t__75, 0_w2f__i8)
      t__79 = t__76 * t__78
      STRBOGUS = 'nf_bogusstring'
      NDIMS = 0
      DIMLEN = 0
      ERRMSG = nf_open(FNAME, (0), FID)
      CALL handle_err(ERRMSG, STRBOGUS)
      ERRMSG = nf_inq_varid(FID, ANAME, AID)
      IF(ERRMSG .eq. INT((-49_w2f__i8))) THEN
        LCHAR = lastchar(FNAME)
        WRITE(*, *) 'variable "' // ANAME // '" not found in ' // FNAME
     > (1_w2f__i8 : MAX(LCHAR, 0))
        WRITE(*, *) 'set to zero'
        doloop_ub = NX
        DO IX = 1, doloop_ub, 1
          doloop_ub0 = NY
          DO IY = 1, doloop_ub0, 1
            A(INT(IX),INT(IY))%v = 0.0D00
            CALL zero_deriv(A(INT(IX),INT(IY)))
          END DO
        END DO
      ELSE
        CALL handle_err(ERRMSG, STRBOGUS)
        ERRMSG = nf_inq_varndims(FID, AID, NDIMS)
        CALL handle_err(ERRMSG, STRBOGUS)
        IF(NDIMS .eq. INT(3_w2f__i8)) THEN
          ERRMSG = nf_inq_dimlen(FID, (1), DIMLEN)
          CALL handle_err(ERRMSG, STRBOGUS)
          IF(DIMLEN .eq. INT(1_w2f__i8)) THEN
            ERRMSG = nf_get_var_double_ad2(FID, AID, A, NX, NY)
            CALL handle_err(ERRMSG, STRBOGUS)
          ELSE
            WRITE(*, *) 'read_field_netcdf: "', ANAME, '" in ' // FNAME
     > (1_w2f__i8 : MAX(LCHAR, 0)) // ' has too many dimensions'
            WRITE(*, *) 'setting "', ANAME, '" to zero'
            doloop_ub1 = NX
            DO IX = 1, doloop_ub1, 1
              doloop_ub2 = NY
              DO IY = 1, doloop_ub2, 1
                A(INT(IX),INT(IY))%v = 0.0D00
                CALL zero_deriv(A(INT(IX),INT(IY)))
              END DO
            END DO
          ENDIF
        ELSE
          ERRMSG = nf_get_var_double_ad2(FID, AID, A, NX, NY)
          CALL handle_err(ERRMSG, STRBOGUS)
        ENDIF
      ENDIF
      ERRMSG = nf_close(FID)
      CALL handle_err(ERRMSG, STRBOGUS)
      RETURN
      END SUBROUTINE

      SUBROUTINE read_snap_netcdf(FNAME, SNAP_TIME, NX, NY, ANAME, A)
      use w2f__types
      use active_module
      IMPLICIT NONE
C
C     **** Parameters and Result ****
C
      CHARACTER(80) FNAME
      type(active) :: SNAP_TIME
      INTEGER(w2f__i4) NX
      INTEGER(w2f__i4) NY
      CHARACTER(80) ANAME
      type(active) :: A(1 : NX, 1 : NY)
C
C     **** Local Variables and functions ****
C
      INTEGER(w2f__i8) t__80
      INTEGER(w2f__i8) t__82
      INTEGER(w2f__i8) t__81
      INTEGER(w2f__i8) t__84
      INTEGER(w2f__i4) AID
      INTEGER(w2f__i4) COUNT(1 : 3)
      INTEGER(w2f__i4) DID
      INTEGER(w2f__i4) ERRMSG
      INTEGER(w2f__i4) FID
      INTEGER(w2f__i4) FILBYTE
      PARAMETER ( FILBYTE = -127)
      INTEGER(w2f__i4) FILCHAR
      PARAMETER ( FILCHAR = 0)
      REAL(w2f__8) FILDOUB
      PARAMETER ( FILDOUB = 9.969209968386869d+36)
      REAL(w2f__4) FILFLOAT
      PARAMETER ( FILFLOAT = 9.969210d+36)
      INTEGER(w2f__i4) FILLONG
      PARAMETER ( FILLONG = -2147483647)
      INTEGER(w2f__i4) FILSHORT
      PARAMETER ( FILSHORT = -32767)
      EXTERNAL handle_err
      INTEGER(w2f__i4) IX
      INTEGER(w2f__i4) IY
      EXTERNAL lastchar
      INTEGER(w2f__i4) lastchar
      INTEGER(w2f__i4) LCHAR
      INTEGER(w2f__i4) MAXNCATT
      PARAMETER ( MAXNCATT = 2000)
      INTEGER(w2f__i4) MAXNCDIM
      PARAMETER ( MAXNCDIM = 100)
      INTEGER(w2f__i4) MAXNCNAM
      PARAMETER ( MAXNCNAM = 128)
      INTEGER(w2f__i4) MAXNCOP
      PARAMETER ( MAXNCOP = 32)
      INTEGER(w2f__i4) MAXNCVAR
      PARAMETER ( MAXNCVAR = 2000)
      INTEGER(w2f__i4) MAXVDIMS
      PARAMETER ( MAXVDIMS = 100)
      type(active) :: MISVAL
      INTEGER(w2f__i4) NCBYTE
      PARAMETER ( NCBYTE = 1)
      INTEGER(w2f__i4) NCCHAR
      PARAMETER ( NCCHAR = 2)
      INTEGER(w2f__i4) NCCLOB
      PARAMETER ( NCCLOB = 0)
      INTEGER(w2f__i4) NCCREAT
      PARAMETER ( NCCREAT = 2)
      INTEGER(w2f__i4) NCDOUBLE
      PARAMETER ( NCDOUBLE = 6)
      INTEGER(w2f__i4) NCEBADD
      PARAMETER ( NCEBADD = -46)
      INTEGER(w2f__i4) NCEBADID
      PARAMETER ( NCEBADID = -33)
      INTEGER(w2f__i4) NCEBADTY
      PARAMETER ( NCEBADTY = -45)
      INTEGER(w2f__i4) NCECOORD
      PARAMETER ( NCECOORD = -40)
      INTEGER(w2f__i4) NCEEXIST
      PARAMETER ( NCEEXIST = -35)
      INTEGER(w2f__i4) NCEGLOB
      PARAMETER ( NCEGLOB = -50)
      INTEGER(w2f__i4) NCEINDEF
      PARAMETER ( NCEINDEF = -39)
      INTEGER(w2f__i4) NCEINVAL
      PARAMETER ( NCEINVAL = -36)
      INTEGER(w2f__i4) NCEMAXAT
      PARAMETER ( NCEMAXAT = -44)
      INTEGER(w2f__i4) NCEMAXDS
      PARAMETER ( NCEMAXDS = -41)
      INTEGER(w2f__i4) NCEMAXVS
      PARAMETER ( NCEMAXVS = -48)
      INTEGER(w2f__i4) NCENAME
      PARAMETER ( NCENAME = -42)
      INTEGER(w2f__i4) NCENFILE
      PARAMETER ( NCENFILE = -31)
      INTEGER(w2f__i4) NCENOATT
      PARAMETER ( NCENOATT = -43)
      INTEGER(w2f__i4) NCENOTIN
      PARAMETER ( NCENOTIN = -38)
      INTEGER(w2f__i4) NCENOTNC
      PARAMETER ( NCENOTNC = -51)
      INTEGER(w2f__i4) NCENOTVR
      PARAMETER ( NCENOTVR = -49)
      INTEGER(w2f__i4) NCENTOOL
      PARAMETER ( NCENTOOL = -53)
      INTEGER(w2f__i4) NCEPERM
      PARAMETER ( NCEPERM = -37)
      INTEGER(w2f__i4) NCESTS
      PARAMETER ( NCESTS = -52)
      INTEGER(w2f__i4) NCEUNLIM
      PARAMETER ( NCEUNLIM = -47)
      INTEGER(w2f__i4) NCEXCL
      PARAMETER ( NCEXCL = 4)
      INTEGER(w2f__i4) NCFATAL
      PARAMETER ( NCFATAL = 1)
      INTEGER(w2f__i4) NCFILL
      PARAMETER ( NCFILL = 0)
      INTEGER(w2f__i4) NCFLOAT
      PARAMETER ( NCFLOAT = 5)
      INTEGER(w2f__i4) NCFOOBAR
      PARAMETER ( NCFOOBAR = 32)
      INTEGER(w2f__i4) NCGLOBAL
      PARAMETER ( NCGLOBAL = 0)
      INTEGER(w2f__i4) NCHDIRTY
      PARAMETER ( NCHDIRTY = 128)
      INTEGER(w2f__i4) NCHSYNC
      PARAMETER ( NCHSYNC = 32)
      INTEGER(w2f__i4) NCINDEF
      PARAMETER ( NCINDEF = 8)
      INTEGER(w2f__i4) NCLINK
      PARAMETER ( NCLINK = 32768)
      INTEGER(w2f__i4) NCLONG
      PARAMETER ( NCLONG = 4)
      INTEGER(w2f__i4) NCNDIRTY
      PARAMETER ( NCNDIRTY = 64)
      INTEGER(w2f__i4) NCNOCLOB
      PARAMETER ( NCNOCLOB = 4)
      INTEGER(w2f__i4) NCNOERR
      PARAMETER ( NCNOERR = 0)
      INTEGER(w2f__i4) NCNOFILL
      PARAMETER ( NCNOFILL = 256)
      INTEGER(w2f__i4) NCNOWRIT
      PARAMETER ( NCNOWRIT = 0)
      INTEGER(w2f__i4) NCNSYNC
      PARAMETER ( NCNSYNC = 16)
      INTEGER(w2f__i4) NCRDWR
      PARAMETER ( NCRDWR = 1)
      INTEGER(w2f__i4) NCSHORT
      PARAMETER ( NCSHORT = 3)
      INTEGER(w2f__i4) NCSYSERR
      PARAMETER ( NCSYSERR = -31)
      INTEGER(w2f__i4) NCUNLIM
      PARAMETER ( NCUNLIM = 0)
      INTEGER(w2f__i4) NCVERBOS
      PARAMETER ( NCVERBOS = 2)
      INTEGER(w2f__i4) NCWRITE
      PARAMETER ( NCWRITE = 1)
      INTEGER(w2f__i4) NF_ALIGN_CHUNK
      PARAMETER ( NF_ALIGN_CHUNK = -1)
      INTEGER(w2f__i4) NF_BYTE
      PARAMETER ( NF_BYTE = 1)
      INTEGER(w2f__i4) NF_CHAR
      PARAMETER ( NF_CHAR = 2)
      INTEGER(w2f__i4) NF_CLOBBER
      PARAMETER ( NF_CLOBBER = 0)
      EXTERNAL nf_close
      INTEGER(w2f__i4) nf_close
      INTEGER(w2f__i4) NF_DOUBLE
      PARAMETER ( NF_DOUBLE = 6)
      INTEGER(w2f__i4) NF_EBADDIM
      PARAMETER ( NF_EBADDIM = -46)
      INTEGER(w2f__i4) NF_EBADID
      PARAMETER ( NF_EBADID = -33)
      INTEGER(w2f__i4) NF_EBADNAME
      PARAMETER ( NF_EBADNAME = -59)
      INTEGER(w2f__i4) NF_EBADTYPE
      PARAMETER ( NF_EBADTYPE = -45)
      INTEGER(w2f__i4) NF_ECHAR
      PARAMETER ( NF_ECHAR = -56)
      INTEGER(w2f__i4) NF_EEDGE
      PARAMETER ( NF_EEDGE = -57)
      INTEGER(w2f__i4) NF_EEXIST
      PARAMETER ( NF_EEXIST = -35)
      INTEGER(w2f__i4) NF_EGLOBAL
      PARAMETER ( NF_EGLOBAL = -50)
      INTEGER(w2f__i4) NF_EINDEFINE
      PARAMETER ( NF_EINDEFINE = -39)
      INTEGER(w2f__i4) NF_EINVAL
      PARAMETER ( NF_EINVAL = -36)
      INTEGER(w2f__i4) NF_EINVALCOORDS
      PARAMETER ( NF_EINVALCOORDS = -40)
      INTEGER(w2f__i4) NF_EMAXATTS
      PARAMETER ( NF_EMAXATTS = -44)
      INTEGER(w2f__i4) NF_EMAXDIMS
      PARAMETER ( NF_EMAXDIMS = -41)
      INTEGER(w2f__i4) NF_EMAXNAME
      PARAMETER ( NF_EMAXNAME = -53)
      INTEGER(w2f__i4) NF_EMAXVARS
      PARAMETER ( NF_EMAXVARS = -48)
      INTEGER(w2f__i4) NF_ENAMEINUSE
      PARAMETER ( NF_ENAMEINUSE = -42)
      INTEGER(w2f__i4) NF_ENOMEM
      PARAMETER ( NF_ENOMEM = -61)
      INTEGER(w2f__i4) NF_ENORECVARS
      PARAMETER ( NF_ENORECVARS = -55)
      INTEGER(w2f__i4) NF_ENOTATT
      PARAMETER ( NF_ENOTATT = -43)
      INTEGER(w2f__i4) NF_ENOTINDEFINE
      PARAMETER ( NF_ENOTINDEFINE = -38)
      INTEGER(w2f__i4) NF_ENOTNC
      PARAMETER ( NF_ENOTNC = -51)
      INTEGER(w2f__i4) NF_ENOTVAR
      PARAMETER ( NF_ENOTVAR = -49)
      INTEGER(w2f__i4) NF_EPERM
      PARAMETER ( NF_EPERM = -37)
      INTEGER(w2f__i4) NF_ERANGE
      PARAMETER ( NF_ERANGE = -60)
      INTEGER(w2f__i4) NF_ESTRIDE
      PARAMETER ( NF_ESTRIDE = -58)
      INTEGER(w2f__i4) NF_ESTS
      PARAMETER ( NF_ESTS = -52)
      INTEGER(w2f__i4) NF_EUNLIMIT
      PARAMETER ( NF_EUNLIMIT = -54)
      INTEGER(w2f__i4) NF_EUNLIMPOS
      PARAMETER ( NF_EUNLIMPOS = -47)
      INTEGER(w2f__i4) NF_FATAL
      PARAMETER ( NF_FATAL = 1)
      INTEGER(w2f__i4) NF_FILL
      PARAMETER ( NF_FILL = 0)
      INTEGER(w2f__i4) NF_FILL_BYTE
      PARAMETER ( NF_FILL_BYTE = -127)
      INTEGER(w2f__i4) NF_FILL_CHAR
      PARAMETER ( NF_FILL_CHAR = 0)
      REAL(w2f__8) NF_FILL_DOUBLE
      PARAMETER ( NF_FILL_DOUBLE = 9.969209968386869d+36)
      REAL(w2f__4) NF_FILL_FLOAT
      PARAMETER ( NF_FILL_FLOAT = 9.969210d+36)
      INTEGER(w2f__i4) NF_FILL_INT
      PARAMETER ( NF_FILL_INT = -2147483647)
      INTEGER(w2f__i4) NF_FILL_INT1
      PARAMETER ( NF_FILL_INT1 = -127)
      INTEGER(w2f__i4) NF_FILL_INT2
      PARAMETER ( NF_FILL_INT2 = -32767)
      REAL(w2f__4) NF_FILL_REAL
      PARAMETER ( NF_FILL_REAL = 9.969210d+36)
      INTEGER(w2f__i4) NF_FILL_SHORT
      PARAMETER ( NF_FILL_SHORT = -32767)
      INTEGER(w2f__i4) NF_FLOAT
      PARAMETER ( NF_FLOAT = 5)
      EXTERNAL nf_get_att_double
      INTEGER(w2f__i4) nf_get_att_double
      EXTERNAL nf_get_var1_double_ad0
      INTEGER(w2f__i4) nf_get_var1_double_ad0
      EXTERNAL nf_get_vara_double_ad2
      INTEGER(w2f__i4) nf_get_vara_double_ad2
      INTEGER(w2f__i4) NF_GLOBAL
      PARAMETER ( NF_GLOBAL = 0)
      EXTERNAL nf_inq_dimlen
      INTEGER(w2f__i4) nf_inq_dimlen
      EXTERNAL nf_inq_vardimid
      INTEGER(w2f__i4) nf_inq_vardimid
      EXTERNAL nf_inq_varid
      INTEGER(w2f__i4) nf_inq_varid
      INTEGER(w2f__i4) NF_INT
      PARAMETER ( NF_INT = 4)
      INTEGER(w2f__i4) NF_INT1
      PARAMETER ( NF_INT1 = 1)
      INTEGER(w2f__i4) NF_INT2
      PARAMETER ( NF_INT2 = 3)
      INTEGER(w2f__i4) NF_LOCK
      PARAMETER ( NF_LOCK = 1024)
      INTEGER(w2f__i4) NF_MAX_ATTRS
      PARAMETER ( NF_MAX_ATTRS = 4096)
      INTEGER(w2f__i4) NF_MAX_DIMS
      PARAMETER ( NF_MAX_DIMS = 512)
      INTEGER(w2f__i4) NF_MAX_NAME
      PARAMETER ( NF_MAX_NAME = 128)
      INTEGER(w2f__i4) NF_MAX_VARS
      PARAMETER ( NF_MAX_VARS = 4096)
      INTEGER(w2f__i4) NF_MAX_VAR_DIMS
      PARAMETER ( NF_MAX_VAR_DIMS = 512)
      INTEGER(w2f__i4) NF_NOCLOBBER
      PARAMETER ( NF_NOCLOBBER = 4)
      INTEGER(w2f__i4) NF_NOERR
      PARAMETER ( NF_NOERR = 0)
      INTEGER(w2f__i4) NF_NOFILL
      PARAMETER ( NF_NOFILL = 256)
      INTEGER(w2f__i4) NF_NOWRITE
      PARAMETER ( NF_NOWRITE = 0)
      EXTERNAL nf_open
      INTEGER(w2f__i4) nf_open
      INTEGER(w2f__i4) NF_REAL
      PARAMETER ( NF_REAL = 5)
      INTEGER(w2f__i4) NF_SHARE
      PARAMETER ( NF_SHARE = 2048)
      INTEGER(w2f__i4) NF_SHORT
      PARAMETER ( NF_SHORT = 3)
      INTEGER(w2f__i4) NF_SIZEHINT_DEFAULT
      PARAMETER ( NF_SIZEHINT_DEFAULT = 0)
      INTEGER(w2f__i4) NF_UNLIMITED
      PARAMETER ( NF_UNLIMITED = 0)
      INTEGER(w2f__i4) NF_VERBOSE
      PARAMETER ( NF_VERBOSE = 2)
      INTEGER(w2f__i4) NF_WRITE
      PARAMETER ( NF_WRITE = 1)
      INTEGER(w2f__i4) NT
      type(active) :: RECTIME
      INTEGER(w2f__i4) START(1 : 3)
      CHARACTER(80) STRBOGUS
      INTEGER(w2f__i4) TID
      INTEGER(w2f__i8) t__83
      INTEGER(w2f__i8) t__85
C
C     **** Temporary variables ****
C
      INTEGER(w2f__i4) doloop_ub
      INTEGER(w2f__i4) doloop_ub0
      INTEGER(w2f__i4) doloop_ub1
      INTEGER(w2f__i4) doloop_ub2
C
C     **** statements ****
C
      t__80 = NX
      t__81 = NY
      t__82 = MAX(t__80, 0_w2f__i8)
      t__83 = t__82
      t__84 = MAX(t__81, 0_w2f__i8)
      t__85 = t__82 * t__84
      STRBOGUS = 'nf_bogusstring'
      START(1) = 1
      START(2) = 1
      COUNT(1) = NX
      COUNT(2) = NY
      COUNT(3) = 1
      LCHAR = lastchar(FNAME)
      ERRMSG = nf_open(FNAME, (0), FID)
      CALL handle_err(ERRMSG, STRBOGUS)
      ERRMSG = nf_inq_varid(FID, 'TIME', TID)
      CALL handle_err(ERRMSG, STRBOGUS)
      ERRMSG = nf_inq_vardimid(FID, TID, DID)
      CALL handle_err(ERRMSG, STRBOGUS)
      ERRMSG = nf_inq_dimlen(FID, DID, NT)
      CALL handle_err(ERRMSG, STRBOGUS)
      START(3) = NT
      ERRMSG = nf_get_var1_double_ad0(FID, TID, START(3), RECTIME)
      CALL handle_err(ERRMSG, STRBOGUS)
      IF (ABS(RECTIME%v-SNAP_TIME%v) .GT. 1.00000000000000002092D-08) TH
     +EN
        START(3) = (START(3) +(-1))
        IF(START(3) .GT. INT(0_w2f__i8)) THEN
          CALL handle_err(ERRMSG, STRBOGUS)
        ELSE
          WRITE(*, *) 'snap_time does not exist in ' // FNAME(1_w2f__i8
     >  : MAX(LCHAR, 0))
        ENDIF
      ENDIF
      ERRMSG = nf_inq_varid(FID, ANAME, AID)
      IF(ERRMSG .eq. INT((-49_w2f__i8))) THEN
        LCHAR = lastchar(FNAME)
        WRITE(*, *) 'variable "' // ANAME // '" not found in ' // FNAME
     > (1_w2f__i8 : MAX(LCHAR, 0))
        WRITE(*, *) 'set to zero'
        doloop_ub = NX
        DO IX = 1, doloop_ub, 1
          doloop_ub0 = NY
          DO IY = 1, doloop_ub0, 1
            A(INT(IX),INT(IY))%v = 0.0D00
            CALL zero_deriv(A(INT(IX),INT(IY)))
          END DO
        END DO
      ELSE
        CALL handle_err(ERRMSG, STRBOGUS)
        ERRMSG = nf_get_att_double(FID, AID, 'missing_value', MISVAL)
        CALL handle_err(ERRMSG, STRBOGUS)
        ERRMSG = nf_get_vara_double_ad2(FID, AID, START, COUNT, A, NX,
     >  NY)
        CALL handle_err(ERRMSG, STRBOGUS)
        doloop_ub1 = NX
        DO IX = 1, doloop_ub1, 1
          doloop_ub2 = NY
          DO IY = 1, doloop_ub2, 1
            IF (A(IX,IY)%v .eq. MISVAL%v) THEN
              A(INT(IX),INT(IY))%v = 0.0D00
              CALL zero_deriv(A(INT(IX),INT(IY)))
            ENDIF
          END DO
        END DO
      ENDIF
      ERRMSG = nf_close(FID)
      CALL handle_err(ERRMSG, STRBOGUS)
      RETURN
      END SUBROUTINE

      SUBROUTINE read_weight_depth_netcdf(FNAME, ANAME, A, NX, NY, N)
      use w2f__types
      use active_module
      IMPLICIT NONE
C
C     **** Parameters and Result ****
C
      CHARACTER(80) FNAME
      CHARACTER(80) ANAME
      INTEGER(w2f__i4) NX
      INTEGER(w2f__i4) NY
      INTEGER(w2f__i4) N
      type(active) :: A(1 : NX, 1 : NX, 1 : NY, 1 : NY)
C
C     **** Local Variables and functions ****
C
      INTEGER(w2f__i8) t__86
      INTEGER(w2f__i8) t__88
      INTEGER(w2f__i8) t__87
      INTEGER(w2f__i8) t__91
      INTEGER(w2f__i4) AID
      INTEGER(w2f__i4) ERRMSG
      INTEGER(w2f__i4) FID
      INTEGER(w2f__i4) FILBYTE
      PARAMETER ( FILBYTE = -127)
      INTEGER(w2f__i4) FILCHAR
      PARAMETER ( FILCHAR = 0)
      REAL(w2f__8) FILDOUB
      PARAMETER ( FILDOUB = 9.969209968386869d+36)
      REAL(w2f__4) FILFLOAT
      PARAMETER ( FILFLOAT = 9.969210d+36)
      INTEGER(w2f__i4) FILLONG
      PARAMETER ( FILLONG = -2147483647)
      INTEGER(w2f__i4) FILSHORT
      PARAMETER ( FILSHORT = -32767)
      EXTERNAL handle_err
      EXTERNAL lastchar
      INTEGER(w2f__i4) lastchar
      INTEGER(w2f__i4) LCHAR
      INTEGER(w2f__i4) MAXNCATT
      PARAMETER ( MAXNCATT = 2000)
      INTEGER(w2f__i4) MAXNCDIM
      PARAMETER ( MAXNCDIM = 100)
      INTEGER(w2f__i4) MAXNCNAM
      PARAMETER ( MAXNCNAM = 128)
      INTEGER(w2f__i4) MAXNCOP
      PARAMETER ( MAXNCOP = 32)
      INTEGER(w2f__i4) MAXNCVAR
      PARAMETER ( MAXNCVAR = 2000)
      INTEGER(w2f__i4) MAXVDIMS
      PARAMETER ( MAXVDIMS = 100)
      INTEGER(w2f__i4) NCBYTE
      PARAMETER ( NCBYTE = 1)
      INTEGER(w2f__i4) NCCHAR
      PARAMETER ( NCCHAR = 2)
      INTEGER(w2f__i4) NCCLOB
      PARAMETER ( NCCLOB = 0)
      INTEGER(w2f__i4) NCCREAT
      PARAMETER ( NCCREAT = 2)
      INTEGER(w2f__i4) NCDOUBLE
      PARAMETER ( NCDOUBLE = 6)
      INTEGER(w2f__i4) NCEBADD
      PARAMETER ( NCEBADD = -46)
      INTEGER(w2f__i4) NCEBADID
      PARAMETER ( NCEBADID = -33)
      INTEGER(w2f__i4) NCEBADTY
      PARAMETER ( NCEBADTY = -45)
      INTEGER(w2f__i4) NCECOORD
      PARAMETER ( NCECOORD = -40)
      INTEGER(w2f__i4) NCEEXIST
      PARAMETER ( NCEEXIST = -35)
      INTEGER(w2f__i4) NCEGLOB
      PARAMETER ( NCEGLOB = -50)
      INTEGER(w2f__i4) NCEINDEF
      PARAMETER ( NCEINDEF = -39)
      INTEGER(w2f__i4) NCEINVAL
      PARAMETER ( NCEINVAL = -36)
      INTEGER(w2f__i4) NCEMAXAT
      PARAMETER ( NCEMAXAT = -44)
      INTEGER(w2f__i4) NCEMAXDS
      PARAMETER ( NCEMAXDS = -41)
      INTEGER(w2f__i4) NCEMAXVS
      PARAMETER ( NCEMAXVS = -48)
      INTEGER(w2f__i4) NCENAME
      PARAMETER ( NCENAME = -42)
      INTEGER(w2f__i4) NCENFILE
      PARAMETER ( NCENFILE = -31)
      INTEGER(w2f__i4) NCENOATT
      PARAMETER ( NCENOATT = -43)
      INTEGER(w2f__i4) NCENOTIN
      PARAMETER ( NCENOTIN = -38)
      INTEGER(w2f__i4) NCENOTNC
      PARAMETER ( NCENOTNC = -51)
      INTEGER(w2f__i4) NCENOTVR
      PARAMETER ( NCENOTVR = -49)
      INTEGER(w2f__i4) NCENTOOL
      PARAMETER ( NCENTOOL = -53)
      INTEGER(w2f__i4) NCEPERM
      PARAMETER ( NCEPERM = -37)
      INTEGER(w2f__i4) NCESTS
      PARAMETER ( NCESTS = -52)
      INTEGER(w2f__i4) NCEUNLIM
      PARAMETER ( NCEUNLIM = -47)
      INTEGER(w2f__i4) NCEXCL
      PARAMETER ( NCEXCL = 4)
      INTEGER(w2f__i4) NCFATAL
      PARAMETER ( NCFATAL = 1)
      INTEGER(w2f__i4) NCFILL
      PARAMETER ( NCFILL = 0)
      INTEGER(w2f__i4) NCFLOAT
      PARAMETER ( NCFLOAT = 5)
      INTEGER(w2f__i4) NCFOOBAR
      PARAMETER ( NCFOOBAR = 32)
      INTEGER(w2f__i4) NCGLOBAL
      PARAMETER ( NCGLOBAL = 0)
      INTEGER(w2f__i4) NCHDIRTY
      PARAMETER ( NCHDIRTY = 128)
      INTEGER(w2f__i4) NCHSYNC
      PARAMETER ( NCHSYNC = 32)
      INTEGER(w2f__i4) NCINDEF
      PARAMETER ( NCINDEF = 8)
      INTEGER(w2f__i4) NCLINK
      PARAMETER ( NCLINK = 32768)
      INTEGER(w2f__i4) NCLONG
      PARAMETER ( NCLONG = 4)
      INTEGER(w2f__i4) NCNDIRTY
      PARAMETER ( NCNDIRTY = 64)
      INTEGER(w2f__i4) NCNOCLOB
      PARAMETER ( NCNOCLOB = 4)
      INTEGER(w2f__i4) NCNOERR
      PARAMETER ( NCNOERR = 0)
      INTEGER(w2f__i4) NCNOFILL
      PARAMETER ( NCNOFILL = 256)
      INTEGER(w2f__i4) NCNOWRIT
      PARAMETER ( NCNOWRIT = 0)
      INTEGER(w2f__i4) NCNSYNC
      PARAMETER ( NCNSYNC = 16)
      INTEGER(w2f__i4) NCRDWR
      PARAMETER ( NCRDWR = 1)
      INTEGER(w2f__i4) NCSHORT
      PARAMETER ( NCSHORT = 3)
      INTEGER(w2f__i4) NCSYSERR
      PARAMETER ( NCSYSERR = -31)
      INTEGER(w2f__i4) NCUNLIM
      PARAMETER ( NCUNLIM = 0)
      INTEGER(w2f__i4) NCVERBOS
      PARAMETER ( NCVERBOS = 2)
      INTEGER(w2f__i4) NCWRITE
      PARAMETER ( NCWRITE = 1)
      INTEGER(w2f__i4) NF_ALIGN_CHUNK
      PARAMETER ( NF_ALIGN_CHUNK = -1)
      INTEGER(w2f__i4) NF_BYTE
      PARAMETER ( NF_BYTE = 1)
      INTEGER(w2f__i4) NF_CHAR
      PARAMETER ( NF_CHAR = 2)
      INTEGER(w2f__i4) NF_CLOBBER
      PARAMETER ( NF_CLOBBER = 0)
      EXTERNAL nf_close
      INTEGER(w2f__i4) nf_close
      INTEGER(w2f__i4) NF_DOUBLE
      PARAMETER ( NF_DOUBLE = 6)
      INTEGER(w2f__i4) NF_EBADDIM
      PARAMETER ( NF_EBADDIM = -46)
      INTEGER(w2f__i4) NF_EBADID
      PARAMETER ( NF_EBADID = -33)
      INTEGER(w2f__i4) NF_EBADNAME
      PARAMETER ( NF_EBADNAME = -59)
      INTEGER(w2f__i4) NF_EBADTYPE
      PARAMETER ( NF_EBADTYPE = -45)
      INTEGER(w2f__i4) NF_ECHAR
      PARAMETER ( NF_ECHAR = -56)
      INTEGER(w2f__i4) NF_EEDGE
      PARAMETER ( NF_EEDGE = -57)
      INTEGER(w2f__i4) NF_EEXIST
      PARAMETER ( NF_EEXIST = -35)
      INTEGER(w2f__i4) NF_EGLOBAL
      PARAMETER ( NF_EGLOBAL = -50)
      INTEGER(w2f__i4) NF_EINDEFINE
      PARAMETER ( NF_EINDEFINE = -39)
      INTEGER(w2f__i4) NF_EINVAL
      PARAMETER ( NF_EINVAL = -36)
      INTEGER(w2f__i4) NF_EINVALCOORDS
      PARAMETER ( NF_EINVALCOORDS = -40)
      INTEGER(w2f__i4) NF_EMAXATTS
      PARAMETER ( NF_EMAXATTS = -44)
      INTEGER(w2f__i4) NF_EMAXDIMS
      PARAMETER ( NF_EMAXDIMS = -41)
      INTEGER(w2f__i4) NF_EMAXNAME
      PARAMETER ( NF_EMAXNAME = -53)
      INTEGER(w2f__i4) NF_EMAXVARS
      PARAMETER ( NF_EMAXVARS = -48)
      INTEGER(w2f__i4) NF_ENAMEINUSE
      PARAMETER ( NF_ENAMEINUSE = -42)
      INTEGER(w2f__i4) NF_ENOMEM
      PARAMETER ( NF_ENOMEM = -61)
      INTEGER(w2f__i4) NF_ENORECVARS
      PARAMETER ( NF_ENORECVARS = -55)
      INTEGER(w2f__i4) NF_ENOTATT
      PARAMETER ( NF_ENOTATT = -43)
      INTEGER(w2f__i4) NF_ENOTINDEFINE
      PARAMETER ( NF_ENOTINDEFINE = -38)
      INTEGER(w2f__i4) NF_ENOTNC
      PARAMETER ( NF_ENOTNC = -51)
      INTEGER(w2f__i4) NF_ENOTVAR
      PARAMETER ( NF_ENOTVAR = -49)
      INTEGER(w2f__i4) NF_EPERM
      PARAMETER ( NF_EPERM = -37)
      INTEGER(w2f__i4) NF_ERANGE
      PARAMETER ( NF_ERANGE = -60)
      INTEGER(w2f__i4) NF_ESTRIDE
      PARAMETER ( NF_ESTRIDE = -58)
      INTEGER(w2f__i4) NF_ESTS
      PARAMETER ( NF_ESTS = -52)
      INTEGER(w2f__i4) NF_EUNLIMIT
      PARAMETER ( NF_EUNLIMIT = -54)
      INTEGER(w2f__i4) NF_EUNLIMPOS
      PARAMETER ( NF_EUNLIMPOS = -47)
      INTEGER(w2f__i4) NF_FATAL
      PARAMETER ( NF_FATAL = 1)
      INTEGER(w2f__i4) NF_FILL
      PARAMETER ( NF_FILL = 0)
      INTEGER(w2f__i4) NF_FILL_BYTE
      PARAMETER ( NF_FILL_BYTE = -127)
      INTEGER(w2f__i4) NF_FILL_CHAR
      PARAMETER ( NF_FILL_CHAR = 0)
      REAL(w2f__8) NF_FILL_DOUBLE
      PARAMETER ( NF_FILL_DOUBLE = 9.969209968386869d+36)
      REAL(w2f__4) NF_FILL_FLOAT
      PARAMETER ( NF_FILL_FLOAT = 9.969210d+36)
      INTEGER(w2f__i4) NF_FILL_INT
      PARAMETER ( NF_FILL_INT = -2147483647)
      INTEGER(w2f__i4) NF_FILL_INT1
      PARAMETER ( NF_FILL_INT1 = -127)
      INTEGER(w2f__i4) NF_FILL_INT2
      PARAMETER ( NF_FILL_INT2 = -32767)
      REAL(w2f__4) NF_FILL_REAL
      PARAMETER ( NF_FILL_REAL = 9.969210d+36)
      INTEGER(w2f__i4) NF_FILL_SHORT
      PARAMETER ( NF_FILL_SHORT = -32767)
      INTEGER(w2f__i4) NF_FLOAT
      PARAMETER ( NF_FLOAT = 5)
      EXTERNAL nf_get_var_double_ad4
      INTEGER(w2f__i4) nf_get_var_double_ad4
      INTEGER(w2f__i4) NF_GLOBAL
      PARAMETER ( NF_GLOBAL = 0)
      EXTERNAL nf_inq_varid
      INTEGER(w2f__i4) nf_inq_varid
      INTEGER(w2f__i4) NF_INT
      PARAMETER ( NF_INT = 4)
      INTEGER(w2f__i4) NF_INT1
      PARAMETER ( NF_INT1 = 1)
      INTEGER(w2f__i4) NF_INT2
      PARAMETER ( NF_INT2 = 3)
      INTEGER(w2f__i4) NF_LOCK
      PARAMETER ( NF_LOCK = 1024)
      INTEGER(w2f__i4) NF_MAX_ATTRS
      PARAMETER ( NF_MAX_ATTRS = 4096)
      INTEGER(w2f__i4) NF_MAX_DIMS
      PARAMETER ( NF_MAX_DIMS = 512)
      INTEGER(w2f__i4) NF_MAX_NAME
      PARAMETER ( NF_MAX_NAME = 128)
      INTEGER(w2f__i4) NF_MAX_VARS
      PARAMETER ( NF_MAX_VARS = 4096)
      INTEGER(w2f__i4) NF_MAX_VAR_DIMS
      PARAMETER ( NF_MAX_VAR_DIMS = 512)
      INTEGER(w2f__i4) NF_NOCLOBBER
      PARAMETER ( NF_NOCLOBBER = 4)
      INTEGER(w2f__i4) NF_NOERR
      PARAMETER ( NF_NOERR = 0)
      INTEGER(w2f__i4) NF_NOFILL
      PARAMETER ( NF_NOFILL = 256)
      INTEGER(w2f__i4) NF_NOWRITE
      PARAMETER ( NF_NOWRITE = 0)
      EXTERNAL nf_open
      INTEGER(w2f__i4) nf_open
      INTEGER(w2f__i4) NF_REAL
      PARAMETER ( NF_REAL = 5)
      INTEGER(w2f__i4) NF_SHARE
      PARAMETER ( NF_SHARE = 2048)
      INTEGER(w2f__i4) NF_SHORT
      PARAMETER ( NF_SHORT = 3)
      INTEGER(w2f__i4) NF_SIZEHINT_DEFAULT
      PARAMETER ( NF_SIZEHINT_DEFAULT = 0)
      INTEGER(w2f__i4) NF_UNLIMITED
      PARAMETER ( NF_UNLIMITED = 0)
      INTEGER(w2f__i4) NF_VERBOSE
      PARAMETER ( NF_VERBOSE = 2)
      INTEGER(w2f__i4) NF_WRITE
      PARAMETER ( NF_WRITE = 1)
      CHARACTER(80) STRBOGUS
      INTEGER(w2f__i8) t__89
      INTEGER(w2f__i8) t__90
      INTEGER(w2f__i8) t__92
      INTEGER(w2f__i8) t__93
C
C     **** statements ****
C
      t__86 = NX
      t__87 = NY
      t__88 = MAX(t__86, 0_w2f__i8)
      t__89 = t__88
      t__90 = t__88 * t__89
      t__91 = MAX(t__87, 0_w2f__i8)
      t__92 = t__91 * t__90
      t__93 = t__88 * t__88 * t__91 * t__91
      STRBOGUS = 'nf_bogusstring'
      N = 0
      LCHAR = lastchar(FNAME)
      ERRMSG = nf_open(FNAME, (0), FID)
      IF(ERRMSG .ne. INT(0_w2f__i8)) THEN
        WRITE(*, *) 'netcdf function nf_open: ' // FNAME(1_w2f__i8 :
     >  MAX(LCHAR, 0))
        WRITE(*, *) 'n is set to -1, and "' // ANAME //
     >  '" is not changed'
        N = -1
      ELSE
        ERRMSG = nf_inq_varid(FID, ANAME, AID)
        IF(ERRMSG .eq. INT((-49_w2f__i8))) THEN
          LCHAR = lastchar(FNAME)
          WRITE(*, *) 'variable "' // ANAME // '" not found in ' //
     >  FNAME(1_w2f__i8 : MAX(LCHAR, 0))
          WRITE(*, *) 'n is set to -1, and "' // ANAME //
     >  '" is not changed'
          N = -1
        ELSE
          ERRMSG = nf_get_var_double_ad4(FID, AID, A, NX, NX, NY, NY)
          CALL handle_err(ERRMSG, STRBOGUS)
        ENDIF
        ERRMSG = nf_close(FID)
        CALL handle_err(ERRMSG, STRBOGUS)
      ENDIF
      RETURN
      END SUBROUTINE

      SUBROUTINE get_length_netcdf(FNAME, VNAME, N)
      use w2f__types
      use active_module
      IMPLICIT NONE
C
C     **** Parameters and Result ****
C
      CHARACTER(80) FNAME
      CHARACTER(80) VNAME
      INTEGER(w2f__i4) N
C
C     **** Local Variables and functions ****
C
      INTEGER(w2f__i4) DID
      INTEGER(w2f__i4) ERRMSG
      INTEGER(w2f__i4) FID
      INTEGER(w2f__i4) FILBYTE
      PARAMETER ( FILBYTE = -127)
      INTEGER(w2f__i4) FILCHAR
      PARAMETER ( FILCHAR = 0)
      REAL(w2f__8) FILDOUB
      PARAMETER ( FILDOUB = 9.969209968386869d+36)
      REAL(w2f__4) FILFLOAT
      PARAMETER ( FILFLOAT = 9.969210d+36)
      INTEGER(w2f__i4) FILLONG
      PARAMETER ( FILLONG = -2147483647)
      INTEGER(w2f__i4) FILSHORT
      PARAMETER ( FILSHORT = -32767)
      EXTERNAL handle_err
      EXTERNAL lastchar
      INTEGER(w2f__i4) lastchar
      INTEGER(w2f__i4) LCHAR
      INTEGER(w2f__i4) MAXNCATT
      PARAMETER ( MAXNCATT = 2000)
      INTEGER(w2f__i4) MAXNCDIM
      PARAMETER ( MAXNCDIM = 100)
      INTEGER(w2f__i4) MAXNCNAM
      PARAMETER ( MAXNCNAM = 128)
      INTEGER(w2f__i4) MAXNCOP
      PARAMETER ( MAXNCOP = 32)
      INTEGER(w2f__i4) MAXNCVAR
      PARAMETER ( MAXNCVAR = 2000)
      INTEGER(w2f__i4) MAXVDIMS
      PARAMETER ( MAXVDIMS = 100)
      INTEGER(w2f__i4) NCBYTE
      PARAMETER ( NCBYTE = 1)
      INTEGER(w2f__i4) NCCHAR
      PARAMETER ( NCCHAR = 2)
      INTEGER(w2f__i4) NCCLOB
      PARAMETER ( NCCLOB = 0)
      INTEGER(w2f__i4) NCCREAT
      PARAMETER ( NCCREAT = 2)
      INTEGER(w2f__i4) NCDOUBLE
      PARAMETER ( NCDOUBLE = 6)
      INTEGER(w2f__i4) NCEBADD
      PARAMETER ( NCEBADD = -46)
      INTEGER(w2f__i4) NCEBADID
      PARAMETER ( NCEBADID = -33)
      INTEGER(w2f__i4) NCEBADTY
      PARAMETER ( NCEBADTY = -45)
      INTEGER(w2f__i4) NCECOORD
      PARAMETER ( NCECOORD = -40)
      INTEGER(w2f__i4) NCEEXIST
      PARAMETER ( NCEEXIST = -35)
      INTEGER(w2f__i4) NCEGLOB
      PARAMETER ( NCEGLOB = -50)
      INTEGER(w2f__i4) NCEINDEF
      PARAMETER ( NCEINDEF = -39)
      INTEGER(w2f__i4) NCEINVAL
      PARAMETER ( NCEINVAL = -36)
      INTEGER(w2f__i4) NCEMAXAT
      PARAMETER ( NCEMAXAT = -44)
      INTEGER(w2f__i4) NCEMAXDS
      PARAMETER ( NCEMAXDS = -41)
      INTEGER(w2f__i4) NCEMAXVS
      PARAMETER ( NCEMAXVS = -48)
      INTEGER(w2f__i4) NCENAME
      PARAMETER ( NCENAME = -42)
      INTEGER(w2f__i4) NCENFILE
      PARAMETER ( NCENFILE = -31)
      INTEGER(w2f__i4) NCENOATT
      PARAMETER ( NCENOATT = -43)
      INTEGER(w2f__i4) NCENOTIN
      PARAMETER ( NCENOTIN = -38)
      INTEGER(w2f__i4) NCENOTNC
      PARAMETER ( NCENOTNC = -51)
      INTEGER(w2f__i4) NCENOTVR
      PARAMETER ( NCENOTVR = -49)
      INTEGER(w2f__i4) NCENTOOL
      PARAMETER ( NCENTOOL = -53)
      INTEGER(w2f__i4) NCEPERM
      PARAMETER ( NCEPERM = -37)
      INTEGER(w2f__i4) NCESTS
      PARAMETER ( NCESTS = -52)
      INTEGER(w2f__i4) NCEUNLIM
      PARAMETER ( NCEUNLIM = -47)
      INTEGER(w2f__i4) NCEXCL
      PARAMETER ( NCEXCL = 4)
      INTEGER(w2f__i4) NCFATAL
      PARAMETER ( NCFATAL = 1)
      INTEGER(w2f__i4) NCFILL
      PARAMETER ( NCFILL = 0)
      INTEGER(w2f__i4) NCFLOAT
      PARAMETER ( NCFLOAT = 5)
      INTEGER(w2f__i4) NCFOOBAR
      PARAMETER ( NCFOOBAR = 32)
      INTEGER(w2f__i4) NCGLOBAL
      PARAMETER ( NCGLOBAL = 0)
      INTEGER(w2f__i4) NCHDIRTY
      PARAMETER ( NCHDIRTY = 128)
      INTEGER(w2f__i4) NCHSYNC
      PARAMETER ( NCHSYNC = 32)
      INTEGER(w2f__i4) NCINDEF
      PARAMETER ( NCINDEF = 8)
      INTEGER(w2f__i4) NCLINK
      PARAMETER ( NCLINK = 32768)
      INTEGER(w2f__i4) NCLONG
      PARAMETER ( NCLONG = 4)
      INTEGER(w2f__i4) NCNDIRTY
      PARAMETER ( NCNDIRTY = 64)
      INTEGER(w2f__i4) NCNOCLOB
      PARAMETER ( NCNOCLOB = 4)
      INTEGER(w2f__i4) NCNOERR
      PARAMETER ( NCNOERR = 0)
      INTEGER(w2f__i4) NCNOFILL
      PARAMETER ( NCNOFILL = 256)
      INTEGER(w2f__i4) NCNOWRIT
      PARAMETER ( NCNOWRIT = 0)
      INTEGER(w2f__i4) NCNSYNC
      PARAMETER ( NCNSYNC = 16)
      INTEGER(w2f__i4) NCRDWR
      PARAMETER ( NCRDWR = 1)
      INTEGER(w2f__i4) NCSHORT
      PARAMETER ( NCSHORT = 3)
      INTEGER(w2f__i4) NCSYSERR
      PARAMETER ( NCSYSERR = -31)
      INTEGER(w2f__i4) NCUNLIM
      PARAMETER ( NCUNLIM = 0)
      INTEGER(w2f__i4) NCVERBOS
      PARAMETER ( NCVERBOS = 2)
      INTEGER(w2f__i4) NCWRITE
      PARAMETER ( NCWRITE = 1)
      INTEGER(w2f__i4) NF_ALIGN_CHUNK
      PARAMETER ( NF_ALIGN_CHUNK = -1)
      INTEGER(w2f__i4) NF_BYTE
      PARAMETER ( NF_BYTE = 1)
      INTEGER(w2f__i4) NF_CHAR
      PARAMETER ( NF_CHAR = 2)
      INTEGER(w2f__i4) NF_CLOBBER
      PARAMETER ( NF_CLOBBER = 0)
      EXTERNAL nf_close
      INTEGER(w2f__i4) nf_close
      INTEGER(w2f__i4) NF_DOUBLE
      PARAMETER ( NF_DOUBLE = 6)
      INTEGER(w2f__i4) NF_EBADDIM
      PARAMETER ( NF_EBADDIM = -46)
      INTEGER(w2f__i4) NF_EBADID
      PARAMETER ( NF_EBADID = -33)
      INTEGER(w2f__i4) NF_EBADNAME
      PARAMETER ( NF_EBADNAME = -59)
      INTEGER(w2f__i4) NF_EBADTYPE
      PARAMETER ( NF_EBADTYPE = -45)
      INTEGER(w2f__i4) NF_ECHAR
      PARAMETER ( NF_ECHAR = -56)
      INTEGER(w2f__i4) NF_EEDGE
      PARAMETER ( NF_EEDGE = -57)
      INTEGER(w2f__i4) NF_EEXIST
      PARAMETER ( NF_EEXIST = -35)
      INTEGER(w2f__i4) NF_EGLOBAL
      PARAMETER ( NF_EGLOBAL = -50)
      INTEGER(w2f__i4) NF_EINDEFINE
      PARAMETER ( NF_EINDEFINE = -39)
      INTEGER(w2f__i4) NF_EINVAL
      PARAMETER ( NF_EINVAL = -36)
      INTEGER(w2f__i4) NF_EINVALCOORDS
      PARAMETER ( NF_EINVALCOORDS = -40)
      INTEGER(w2f__i4) NF_EMAXATTS
      PARAMETER ( NF_EMAXATTS = -44)
      INTEGER(w2f__i4) NF_EMAXDIMS
      PARAMETER ( NF_EMAXDIMS = -41)
      INTEGER(w2f__i4) NF_EMAXNAME
      PARAMETER ( NF_EMAXNAME = -53)
      INTEGER(w2f__i4) NF_EMAXVARS
      PARAMETER ( NF_EMAXVARS = -48)
      INTEGER(w2f__i4) NF_ENAMEINUSE
      PARAMETER ( NF_ENAMEINUSE = -42)
      INTEGER(w2f__i4) NF_ENOMEM
      PARAMETER ( NF_ENOMEM = -61)
      INTEGER(w2f__i4) NF_ENORECVARS
      PARAMETER ( NF_ENORECVARS = -55)
      INTEGER(w2f__i4) NF_ENOTATT
      PARAMETER ( NF_ENOTATT = -43)
      INTEGER(w2f__i4) NF_ENOTINDEFINE
      PARAMETER ( NF_ENOTINDEFINE = -38)
      INTEGER(w2f__i4) NF_ENOTNC
      PARAMETER ( NF_ENOTNC = -51)
      INTEGER(w2f__i4) NF_ENOTVAR
      PARAMETER ( NF_ENOTVAR = -49)
      INTEGER(w2f__i4) NF_EPERM
      PARAMETER ( NF_EPERM = -37)
      INTEGER(w2f__i4) NF_ERANGE
      PARAMETER ( NF_ERANGE = -60)
      INTEGER(w2f__i4) NF_ESTRIDE
      PARAMETER ( NF_ESTRIDE = -58)
      INTEGER(w2f__i4) NF_ESTS
      PARAMETER ( NF_ESTS = -52)
      INTEGER(w2f__i4) NF_EUNLIMIT
      PARAMETER ( NF_EUNLIMIT = -54)
      INTEGER(w2f__i4) NF_EUNLIMPOS
      PARAMETER ( NF_EUNLIMPOS = -47)
      INTEGER(w2f__i4) NF_FATAL
      PARAMETER ( NF_FATAL = 1)
      INTEGER(w2f__i4) NF_FILL
      PARAMETER ( NF_FILL = 0)
      INTEGER(w2f__i4) NF_FILL_BYTE
      PARAMETER ( NF_FILL_BYTE = -127)
      INTEGER(w2f__i4) NF_FILL_CHAR
      PARAMETER ( NF_FILL_CHAR = 0)
      REAL(w2f__8) NF_FILL_DOUBLE
      PARAMETER ( NF_FILL_DOUBLE = 9.969209968386869d+36)
      REAL(w2f__4) NF_FILL_FLOAT
      PARAMETER ( NF_FILL_FLOAT = 9.969210d+36)
      INTEGER(w2f__i4) NF_FILL_INT
      PARAMETER ( NF_FILL_INT = -2147483647)
      INTEGER(w2f__i4) NF_FILL_INT1
      PARAMETER ( NF_FILL_INT1 = -127)
      INTEGER(w2f__i4) NF_FILL_INT2
      PARAMETER ( NF_FILL_INT2 = -32767)
      REAL(w2f__4) NF_FILL_REAL
      PARAMETER ( NF_FILL_REAL = 9.969210d+36)
      INTEGER(w2f__i4) NF_FILL_SHORT
      PARAMETER ( NF_FILL_SHORT = -32767)
      INTEGER(w2f__i4) NF_FLOAT
      PARAMETER ( NF_FLOAT = 5)
      INTEGER(w2f__i4) NF_GLOBAL
      PARAMETER ( NF_GLOBAL = 0)
      EXTERNAL nf_inq_dimlen
      INTEGER(w2f__i4) nf_inq_dimlen
      EXTERNAL nf_inq_vardimid
      INTEGER(w2f__i4) nf_inq_vardimid
      EXTERNAL nf_inq_varid
      INTEGER(w2f__i4) nf_inq_varid
      INTEGER(w2f__i4) NF_INT
      PARAMETER ( NF_INT = 4)
      INTEGER(w2f__i4) NF_INT1
      PARAMETER ( NF_INT1 = 1)
      INTEGER(w2f__i4) NF_INT2
      PARAMETER ( NF_INT2 = 3)
      INTEGER(w2f__i4) NF_LOCK
      PARAMETER ( NF_LOCK = 1024)
      INTEGER(w2f__i4) NF_MAX_ATTRS
      PARAMETER ( NF_MAX_ATTRS = 4096)
      INTEGER(w2f__i4) NF_MAX_DIMS
      PARAMETER ( NF_MAX_DIMS = 512)
      INTEGER(w2f__i4) NF_MAX_NAME
      PARAMETER ( NF_MAX_NAME = 128)
      INTEGER(w2f__i4) NF_MAX_VARS
      PARAMETER ( NF_MAX_VARS = 4096)
      INTEGER(w2f__i4) NF_MAX_VAR_DIMS
      PARAMETER ( NF_MAX_VAR_DIMS = 512)
      INTEGER(w2f__i4) NF_NOCLOBBER
      PARAMETER ( NF_NOCLOBBER = 4)
      INTEGER(w2f__i4) NF_NOERR
      PARAMETER ( NF_NOERR = 0)
      INTEGER(w2f__i4) NF_NOFILL
      PARAMETER ( NF_NOFILL = 256)
      INTEGER(w2f__i4) NF_NOWRITE
      PARAMETER ( NF_NOWRITE = 0)
      EXTERNAL nf_open
      INTEGER(w2f__i4) nf_open
      INTEGER(w2f__i4) NF_REAL
      PARAMETER ( NF_REAL = 5)
      INTEGER(w2f__i4) NF_SHARE
      PARAMETER ( NF_SHARE = 2048)
      INTEGER(w2f__i4) NF_SHORT
      PARAMETER ( NF_SHORT = 3)
      INTEGER(w2f__i4) NF_SIZEHINT_DEFAULT
      PARAMETER ( NF_SIZEHINT_DEFAULT = 0)
      INTEGER(w2f__i4) NF_UNLIMITED
      PARAMETER ( NF_UNLIMITED = 0)
      INTEGER(w2f__i4) NF_VERBOSE
      PARAMETER ( NF_VERBOSE = 2)
      INTEGER(w2f__i4) NF_WRITE
      PARAMETER ( NF_WRITE = 1)
      CHARACTER(80) STRBOGUS
      INTEGER(w2f__i4) VID
C
C     **** statements ****
C
      STRBOGUS = 'nf_bogusstring'
      LCHAR = lastchar(FNAME)
      ERRMSG = nf_open(FNAME, (0), FID)
      CALL handle_err(ERRMSG, STRBOGUS)
      ERRMSG = nf_inq_varid(FID, VNAME, VID)
      IF(ERRMSG .eq. INT((-49_w2f__i8))) THEN
        LCHAR = lastchar(FNAME)
        WRITE(*, *) 'variable "' // VNAME // '" not found in ' // FNAME
     > (1_w2f__i8 : MAX(LCHAR, 0))
        WRITE(*, *) 'n is set to -1'
        N = -1
      ELSE
        CALL handle_err(ERRMSG, STRBOGUS)
        ERRMSG = nf_inq_vardimid(FID, VID, DID)
        CALL handle_err(ERRMSG, STRBOGUS)
        ERRMSG = nf_inq_dimlen(FID, DID, N)
        CALL handle_err(ERRMSG, STRBOGUS)
      ENDIF
      ERRMSG = nf_close(FID)
      CALL handle_err(ERRMSG, STRBOGUS)
      RETURN
      END SUBROUTINE

      SUBROUTINE set_nf_real_type(NF_TYPE)
      use w2f__types
      use active_module
      IMPLICIT NONE
C
C     **** Parameters and Result ****
C
      INTEGER(w2f__i4) NF_TYPE
C
C     **** Local Variables and functions ****
C
      INTEGER(w2f__i4) FILBYTE
      PARAMETER ( FILBYTE = -127)
      INTEGER(w2f__i4) FILCHAR
      PARAMETER ( FILCHAR = 0)
      REAL(w2f__8) FILDOUB
      PARAMETER ( FILDOUB = 9.969209968386869d+36)
      REAL(w2f__4) FILFLOAT
      PARAMETER ( FILFLOAT = 9.969210d+36)
      INTEGER(w2f__i4) FILLONG
      PARAMETER ( FILLONG = -2147483647)
      INTEGER(w2f__i4) FILSHORT
      PARAMETER ( FILSHORT = -32767)
      INTEGER(w2f__i4) MAXNCATT
      PARAMETER ( MAXNCATT = 2000)
      INTEGER(w2f__i4) MAXNCDIM
      PARAMETER ( MAXNCDIM = 100)
      INTEGER(w2f__i4) MAXNCNAM
      PARAMETER ( MAXNCNAM = 128)
      INTEGER(w2f__i4) MAXNCOP
      PARAMETER ( MAXNCOP = 32)
      INTEGER(w2f__i4) MAXNCVAR
      PARAMETER ( MAXNCVAR = 2000)
      INTEGER(w2f__i4) MAXVDIMS
      PARAMETER ( MAXVDIMS = 100)
      INTEGER(w2f__i4) NCBYTE
      PARAMETER ( NCBYTE = 1)
      INTEGER(w2f__i4) NCCHAR
      PARAMETER ( NCCHAR = 2)
      INTEGER(w2f__i4) NCCLOB
      PARAMETER ( NCCLOB = 0)
      INTEGER(w2f__i4) NCCREAT
      PARAMETER ( NCCREAT = 2)
      INTEGER(w2f__i4) NCDOUBLE
      PARAMETER ( NCDOUBLE = 6)
      INTEGER(w2f__i4) NCEBADD
      PARAMETER ( NCEBADD = -46)
      INTEGER(w2f__i4) NCEBADID
      PARAMETER ( NCEBADID = -33)
      INTEGER(w2f__i4) NCEBADTY
      PARAMETER ( NCEBADTY = -45)
      INTEGER(w2f__i4) NCECOORD
      PARAMETER ( NCECOORD = -40)
      INTEGER(w2f__i4) NCEEXIST
      PARAMETER ( NCEEXIST = -35)
      INTEGER(w2f__i4) NCEGLOB
      PARAMETER ( NCEGLOB = -50)
      INTEGER(w2f__i4) NCEINDEF
      PARAMETER ( NCEINDEF = -39)
      INTEGER(w2f__i4) NCEINVAL
      PARAMETER ( NCEINVAL = -36)
      INTEGER(w2f__i4) NCEMAXAT
      PARAMETER ( NCEMAXAT = -44)
      INTEGER(w2f__i4) NCEMAXDS
      PARAMETER ( NCEMAXDS = -41)
      INTEGER(w2f__i4) NCEMAXVS
      PARAMETER ( NCEMAXVS = -48)
      INTEGER(w2f__i4) NCENAME
      PARAMETER ( NCENAME = -42)
      INTEGER(w2f__i4) NCENFILE
      PARAMETER ( NCENFILE = -31)
      INTEGER(w2f__i4) NCENOATT
      PARAMETER ( NCENOATT = -43)
      INTEGER(w2f__i4) NCENOTIN
      PARAMETER ( NCENOTIN = -38)
      INTEGER(w2f__i4) NCENOTNC
      PARAMETER ( NCENOTNC = -51)
      INTEGER(w2f__i4) NCENOTVR
      PARAMETER ( NCENOTVR = -49)
      INTEGER(w2f__i4) NCENTOOL
      PARAMETER ( NCENTOOL = -53)
      INTEGER(w2f__i4) NCEPERM
      PARAMETER ( NCEPERM = -37)
      INTEGER(w2f__i4) NCESTS
      PARAMETER ( NCESTS = -52)
      INTEGER(w2f__i4) NCEUNLIM
      PARAMETER ( NCEUNLIM = -47)
      INTEGER(w2f__i4) NCEXCL
      PARAMETER ( NCEXCL = 4)
      INTEGER(w2f__i4) NCFATAL
      PARAMETER ( NCFATAL = 1)
      INTEGER(w2f__i4) NCFILL
      PARAMETER ( NCFILL = 0)
      INTEGER(w2f__i4) NCFLOAT
      PARAMETER ( NCFLOAT = 5)
      INTEGER(w2f__i4) NCFOOBAR
      PARAMETER ( NCFOOBAR = 32)
      INTEGER(w2f__i4) NCGLOBAL
      PARAMETER ( NCGLOBAL = 0)
      INTEGER(w2f__i4) NCHDIRTY
      PARAMETER ( NCHDIRTY = 128)
      INTEGER(w2f__i4) NCHSYNC
      PARAMETER ( NCHSYNC = 32)
      INTEGER(w2f__i4) NCINDEF
      PARAMETER ( NCINDEF = 8)
      INTEGER(w2f__i4) NCLINK
      PARAMETER ( NCLINK = 32768)
      INTEGER(w2f__i4) NCLONG
      PARAMETER ( NCLONG = 4)
      INTEGER(w2f__i4) NCNDIRTY
      PARAMETER ( NCNDIRTY = 64)
      INTEGER(w2f__i4) NCNOCLOB
      PARAMETER ( NCNOCLOB = 4)
      INTEGER(w2f__i4) NCNOERR
      PARAMETER ( NCNOERR = 0)
      INTEGER(w2f__i4) NCNOFILL
      PARAMETER ( NCNOFILL = 256)
      INTEGER(w2f__i4) NCNOWRIT
      PARAMETER ( NCNOWRIT = 0)
      INTEGER(w2f__i4) NCNSYNC
      PARAMETER ( NCNSYNC = 16)
      INTEGER(w2f__i4) NCRDWR
      PARAMETER ( NCRDWR = 1)
      INTEGER(w2f__i4) NCSHORT
      PARAMETER ( NCSHORT = 3)
      INTEGER(w2f__i4) NCSYSERR
      PARAMETER ( NCSYSERR = -31)
      INTEGER(w2f__i4) NCUNLIM
      PARAMETER ( NCUNLIM = 0)
      INTEGER(w2f__i4) NCVERBOS
      PARAMETER ( NCVERBOS = 2)
      INTEGER(w2f__i4) NCWRITE
      PARAMETER ( NCWRITE = 1)
      INTEGER(w2f__i4) NF_ALIGN_CHUNK
      PARAMETER ( NF_ALIGN_CHUNK = -1)
      INTEGER(w2f__i4) NF_BYTE
      PARAMETER ( NF_BYTE = 1)
      INTEGER(w2f__i4) NF_CHAR
      PARAMETER ( NF_CHAR = 2)
      INTEGER(w2f__i4) NF_CLOBBER
      PARAMETER ( NF_CLOBBER = 0)
      INTEGER(w2f__i4) NF_DOUBLE
      PARAMETER ( NF_DOUBLE = 6)
      INTEGER(w2f__i4) NF_EBADDIM
      PARAMETER ( NF_EBADDIM = -46)
      INTEGER(w2f__i4) NF_EBADID
      PARAMETER ( NF_EBADID = -33)
      INTEGER(w2f__i4) NF_EBADNAME
      PARAMETER ( NF_EBADNAME = -59)
      INTEGER(w2f__i4) NF_EBADTYPE
      PARAMETER ( NF_EBADTYPE = -45)
      INTEGER(w2f__i4) NF_ECHAR
      PARAMETER ( NF_ECHAR = -56)
      INTEGER(w2f__i4) NF_EEDGE
      PARAMETER ( NF_EEDGE = -57)
      INTEGER(w2f__i4) NF_EEXIST
      PARAMETER ( NF_EEXIST = -35)
      INTEGER(w2f__i4) NF_EGLOBAL
      PARAMETER ( NF_EGLOBAL = -50)
      INTEGER(w2f__i4) NF_EINDEFINE
      PARAMETER ( NF_EINDEFINE = -39)
      INTEGER(w2f__i4) NF_EINVAL
      PARAMETER ( NF_EINVAL = -36)
      INTEGER(w2f__i4) NF_EINVALCOORDS
      PARAMETER ( NF_EINVALCOORDS = -40)
      INTEGER(w2f__i4) NF_EMAXATTS
      PARAMETER ( NF_EMAXATTS = -44)
      INTEGER(w2f__i4) NF_EMAXDIMS
      PARAMETER ( NF_EMAXDIMS = -41)
      INTEGER(w2f__i4) NF_EMAXNAME
      PARAMETER ( NF_EMAXNAME = -53)
      INTEGER(w2f__i4) NF_EMAXVARS
      PARAMETER ( NF_EMAXVARS = -48)
      INTEGER(w2f__i4) NF_ENAMEINUSE
      PARAMETER ( NF_ENAMEINUSE = -42)
      INTEGER(w2f__i4) NF_ENOMEM
      PARAMETER ( NF_ENOMEM = -61)
      INTEGER(w2f__i4) NF_ENORECVARS
      PARAMETER ( NF_ENORECVARS = -55)
      INTEGER(w2f__i4) NF_ENOTATT
      PARAMETER ( NF_ENOTATT = -43)
      INTEGER(w2f__i4) NF_ENOTINDEFINE
      PARAMETER ( NF_ENOTINDEFINE = -38)
      INTEGER(w2f__i4) NF_ENOTNC
      PARAMETER ( NF_ENOTNC = -51)
      INTEGER(w2f__i4) NF_ENOTVAR
      PARAMETER ( NF_ENOTVAR = -49)
      INTEGER(w2f__i4) NF_EPERM
      PARAMETER ( NF_EPERM = -37)
      INTEGER(w2f__i4) NF_ERANGE
      PARAMETER ( NF_ERANGE = -60)
      INTEGER(w2f__i4) NF_ESTRIDE
      PARAMETER ( NF_ESTRIDE = -58)
      INTEGER(w2f__i4) NF_ESTS
      PARAMETER ( NF_ESTS = -52)
      INTEGER(w2f__i4) NF_EUNLIMIT
      PARAMETER ( NF_EUNLIMIT = -54)
      INTEGER(w2f__i4) NF_EUNLIMPOS
      PARAMETER ( NF_EUNLIMPOS = -47)
      INTEGER(w2f__i4) NF_FATAL
      PARAMETER ( NF_FATAL = 1)
      INTEGER(w2f__i4) NF_FILL
      PARAMETER ( NF_FILL = 0)
      INTEGER(w2f__i4) NF_FILL_BYTE
      PARAMETER ( NF_FILL_BYTE = -127)
      INTEGER(w2f__i4) NF_FILL_CHAR
      PARAMETER ( NF_FILL_CHAR = 0)
      REAL(w2f__8) NF_FILL_DOUBLE
      PARAMETER ( NF_FILL_DOUBLE = 9.969209968386869d+36)
      REAL(w2f__4) NF_FILL_FLOAT
      PARAMETER ( NF_FILL_FLOAT = 9.969210d+36)
      INTEGER(w2f__i4) NF_FILL_INT
      PARAMETER ( NF_FILL_INT = -2147483647)
      INTEGER(w2f__i4) NF_FILL_INT1
      PARAMETER ( NF_FILL_INT1 = -127)
      INTEGER(w2f__i4) NF_FILL_INT2
      PARAMETER ( NF_FILL_INT2 = -32767)
      REAL(w2f__4) NF_FILL_REAL
      PARAMETER ( NF_FILL_REAL = 9.969210d+36)
      INTEGER(w2f__i4) NF_FILL_SHORT
      PARAMETER ( NF_FILL_SHORT = -32767)
      INTEGER(w2f__i4) NF_FLOAT
      PARAMETER ( NF_FLOAT = 5)
      INTEGER(w2f__i4) NF_GLOBAL
      PARAMETER ( NF_GLOBAL = 0)
      INTEGER(w2f__i4) NF_INT
      PARAMETER ( NF_INT = 4)
      INTEGER(w2f__i4) NF_INT1
      PARAMETER ( NF_INT1 = 1)
      INTEGER(w2f__i4) NF_INT2
      PARAMETER ( NF_INT2 = 3)
      INTEGER(w2f__i4) NF_LOCK
      PARAMETER ( NF_LOCK = 1024)
      INTEGER(w2f__i4) NF_MAX_ATTRS
      PARAMETER ( NF_MAX_ATTRS = 4096)
      INTEGER(w2f__i4) NF_MAX_DIMS
      PARAMETER ( NF_MAX_DIMS = 512)
      INTEGER(w2f__i4) NF_MAX_NAME
      PARAMETER ( NF_MAX_NAME = 128)
      INTEGER(w2f__i4) NF_MAX_VARS
      PARAMETER ( NF_MAX_VARS = 4096)
      INTEGER(w2f__i4) NF_MAX_VAR_DIMS
      PARAMETER ( NF_MAX_VAR_DIMS = 512)
      INTEGER(w2f__i4) NF_NOCLOBBER
      PARAMETER ( NF_NOCLOBBER = 4)
      INTEGER(w2f__i4) NF_NOERR
      PARAMETER ( NF_NOERR = 0)
      INTEGER(w2f__i4) NF_NOFILL
      PARAMETER ( NF_NOFILL = 256)
      INTEGER(w2f__i4) NF_NOWRITE
      PARAMETER ( NF_NOWRITE = 0)
      INTEGER(w2f__i4) NF_REAL
      PARAMETER ( NF_REAL = 5)
      INTEGER(w2f__i4) NF_SHARE
      PARAMETER ( NF_SHARE = 2048)
      INTEGER(w2f__i4) NF_SHORT
      PARAMETER ( NF_SHORT = 3)
      INTEGER(w2f__i4) NF_SIZEHINT_DEFAULT
      PARAMETER ( NF_SIZEHINT_DEFAULT = 0)
      INTEGER(w2f__i4) NF_UNLIMITED
      PARAMETER ( NF_UNLIMITED = 0)
      INTEGER(w2f__i4) NF_VERBOSE
      PARAMETER ( NF_VERBOSE = 2)
      INTEGER(w2f__i4) NF_WRITE
      PARAMETER ( NF_WRITE = 1)
C
C     **** statements ****
C
      NF_TYPE = 6
      RETURN
      END SUBROUTINE

      SUBROUTINE handle_err(ERRMSG, FUNCNAME)
      use w2f__types
      use active_module
      IMPLICIT NONE
C
C     **** Parameters and Result ****
C
      INTEGER(w2f__i4) ERRMSG
      CHARACTER(80) FUNCNAME
C
C     **** Local Variables and functions ****
C
      INTEGER(w2f__i4) FILBYTE
      PARAMETER ( FILBYTE = -127)
      INTEGER(w2f__i4) FILCHAR
      PARAMETER ( FILCHAR = 0)
      REAL(w2f__8) FILDOUB
      PARAMETER ( FILDOUB = 9.969209968386869d+36)
      REAL(w2f__4) FILFLOAT
      PARAMETER ( FILFLOAT = 9.969210d+36)
      INTEGER(w2f__i4) FILLONG
      PARAMETER ( FILLONG = -2147483647)
      INTEGER(w2f__i4) FILSHORT
      PARAMETER ( FILSHORT = -32767)
      INTEGER(w2f__i4) MAXNCATT
      PARAMETER ( MAXNCATT = 2000)
      INTEGER(w2f__i4) MAXNCDIM
      PARAMETER ( MAXNCDIM = 100)
      INTEGER(w2f__i4) MAXNCNAM
      PARAMETER ( MAXNCNAM = 128)
      INTEGER(w2f__i4) MAXNCOP
      PARAMETER ( MAXNCOP = 32)
      INTEGER(w2f__i4) MAXNCVAR
      PARAMETER ( MAXNCVAR = 2000)
      INTEGER(w2f__i4) MAXVDIMS
      PARAMETER ( MAXVDIMS = 100)
      INTEGER(w2f__i4) NCBYTE
      PARAMETER ( NCBYTE = 1)
      INTEGER(w2f__i4) NCCHAR
      PARAMETER ( NCCHAR = 2)
      INTEGER(w2f__i4) NCCLOB
      PARAMETER ( NCCLOB = 0)
      INTEGER(w2f__i4) NCCREAT
      PARAMETER ( NCCREAT = 2)
      INTEGER(w2f__i4) NCDOUBLE
      PARAMETER ( NCDOUBLE = 6)
      INTEGER(w2f__i4) NCEBADD
      PARAMETER ( NCEBADD = -46)
      INTEGER(w2f__i4) NCEBADID
      PARAMETER ( NCEBADID = -33)
      INTEGER(w2f__i4) NCEBADTY
      PARAMETER ( NCEBADTY = -45)
      INTEGER(w2f__i4) NCECOORD
      PARAMETER ( NCECOORD = -40)
      INTEGER(w2f__i4) NCEEXIST
      PARAMETER ( NCEEXIST = -35)
      INTEGER(w2f__i4) NCEGLOB
      PARAMETER ( NCEGLOB = -50)
      INTEGER(w2f__i4) NCEINDEF
      PARAMETER ( NCEINDEF = -39)
      INTEGER(w2f__i4) NCEINVAL
      PARAMETER ( NCEINVAL = -36)
      INTEGER(w2f__i4) NCEMAXAT
      PARAMETER ( NCEMAXAT = -44)
      INTEGER(w2f__i4) NCEMAXDS
      PARAMETER ( NCEMAXDS = -41)
      INTEGER(w2f__i4) NCEMAXVS
      PARAMETER ( NCEMAXVS = -48)
      INTEGER(w2f__i4) NCENAME
      PARAMETER ( NCENAME = -42)
      INTEGER(w2f__i4) NCENFILE
      PARAMETER ( NCENFILE = -31)
      INTEGER(w2f__i4) NCENOATT
      PARAMETER ( NCENOATT = -43)
      INTEGER(w2f__i4) NCENOTIN
      PARAMETER ( NCENOTIN = -38)
      INTEGER(w2f__i4) NCENOTNC
      PARAMETER ( NCENOTNC = -51)
      INTEGER(w2f__i4) NCENOTVR
      PARAMETER ( NCENOTVR = -49)
      INTEGER(w2f__i4) NCENTOOL
      PARAMETER ( NCENTOOL = -53)
      INTEGER(w2f__i4) NCEPERM
      PARAMETER ( NCEPERM = -37)
      INTEGER(w2f__i4) NCESTS
      PARAMETER ( NCESTS = -52)
      INTEGER(w2f__i4) NCEUNLIM
      PARAMETER ( NCEUNLIM = -47)
      INTEGER(w2f__i4) NCEXCL
      PARAMETER ( NCEXCL = 4)
      INTEGER(w2f__i4) NCFATAL
      PARAMETER ( NCFATAL = 1)
      INTEGER(w2f__i4) NCFILL
      PARAMETER ( NCFILL = 0)
      INTEGER(w2f__i4) NCFLOAT
      PARAMETER ( NCFLOAT = 5)
      INTEGER(w2f__i4) NCFOOBAR
      PARAMETER ( NCFOOBAR = 32)
      INTEGER(w2f__i4) NCGLOBAL
      PARAMETER ( NCGLOBAL = 0)
      INTEGER(w2f__i4) NCHDIRTY
      PARAMETER ( NCHDIRTY = 128)
      INTEGER(w2f__i4) NCHSYNC
      PARAMETER ( NCHSYNC = 32)
      INTEGER(w2f__i4) NCINDEF
      PARAMETER ( NCINDEF = 8)
      INTEGER(w2f__i4) NCLINK
      PARAMETER ( NCLINK = 32768)
      INTEGER(w2f__i4) NCLONG
      PARAMETER ( NCLONG = 4)
      INTEGER(w2f__i4) NCNDIRTY
      PARAMETER ( NCNDIRTY = 64)
      INTEGER(w2f__i4) NCNOCLOB
      PARAMETER ( NCNOCLOB = 4)
      INTEGER(w2f__i4) NCNOERR
      PARAMETER ( NCNOERR = 0)
      INTEGER(w2f__i4) NCNOFILL
      PARAMETER ( NCNOFILL = 256)
      INTEGER(w2f__i4) NCNOWRIT
      PARAMETER ( NCNOWRIT = 0)
      INTEGER(w2f__i4) NCNSYNC
      PARAMETER ( NCNSYNC = 16)
      INTEGER(w2f__i4) NCRDWR
      PARAMETER ( NCRDWR = 1)
      INTEGER(w2f__i4) NCSHORT
      PARAMETER ( NCSHORT = 3)
      INTEGER(w2f__i4) NCSYSERR
      PARAMETER ( NCSYSERR = -31)
      INTEGER(w2f__i4) NCUNLIM
      PARAMETER ( NCUNLIM = 0)
      INTEGER(w2f__i4) NCVERBOS
      PARAMETER ( NCVERBOS = 2)
      INTEGER(w2f__i4) NCWRITE
      PARAMETER ( NCWRITE = 1)
      INTEGER(w2f__i4) NF_ALIGN_CHUNK
      PARAMETER ( NF_ALIGN_CHUNK = -1)
      INTEGER(w2f__i4) NF_BYTE
      PARAMETER ( NF_BYTE = 1)
      INTEGER(w2f__i4) NF_CHAR
      PARAMETER ( NF_CHAR = 2)
      INTEGER(w2f__i4) NF_CLOBBER
      PARAMETER ( NF_CLOBBER = 0)
      INTEGER(w2f__i4) NF_DOUBLE
      PARAMETER ( NF_DOUBLE = 6)
      INTEGER(w2f__i4) NF_EBADDIM
      PARAMETER ( NF_EBADDIM = -46)
      INTEGER(w2f__i4) NF_EBADID
      PARAMETER ( NF_EBADID = -33)
      INTEGER(w2f__i4) NF_EBADNAME
      PARAMETER ( NF_EBADNAME = -59)
      INTEGER(w2f__i4) NF_EBADTYPE
      PARAMETER ( NF_EBADTYPE = -45)
      INTEGER(w2f__i4) NF_ECHAR
      PARAMETER ( NF_ECHAR = -56)
      INTEGER(w2f__i4) NF_EEDGE
      PARAMETER ( NF_EEDGE = -57)
      INTEGER(w2f__i4) NF_EEXIST
      PARAMETER ( NF_EEXIST = -35)
      INTEGER(w2f__i4) NF_EGLOBAL
      PARAMETER ( NF_EGLOBAL = -50)
      INTEGER(w2f__i4) NF_EINDEFINE
      PARAMETER ( NF_EINDEFINE = -39)
      INTEGER(w2f__i4) NF_EINVAL
      PARAMETER ( NF_EINVAL = -36)
      INTEGER(w2f__i4) NF_EINVALCOORDS
      PARAMETER ( NF_EINVALCOORDS = -40)
      INTEGER(w2f__i4) NF_EMAXATTS
      PARAMETER ( NF_EMAXATTS = -44)
      INTEGER(w2f__i4) NF_EMAXDIMS
      PARAMETER ( NF_EMAXDIMS = -41)
      INTEGER(w2f__i4) NF_EMAXNAME
      PARAMETER ( NF_EMAXNAME = -53)
      INTEGER(w2f__i4) NF_EMAXVARS
      PARAMETER ( NF_EMAXVARS = -48)
      INTEGER(w2f__i4) NF_ENAMEINUSE
      PARAMETER ( NF_ENAMEINUSE = -42)
      INTEGER(w2f__i4) NF_ENOMEM
      PARAMETER ( NF_ENOMEM = -61)
      INTEGER(w2f__i4) NF_ENORECVARS
      PARAMETER ( NF_ENORECVARS = -55)
      INTEGER(w2f__i4) NF_ENOTATT
      PARAMETER ( NF_ENOTATT = -43)
      INTEGER(w2f__i4) NF_ENOTINDEFINE
      PARAMETER ( NF_ENOTINDEFINE = -38)
      INTEGER(w2f__i4) NF_ENOTNC
      PARAMETER ( NF_ENOTNC = -51)
      INTEGER(w2f__i4) NF_ENOTVAR
      PARAMETER ( NF_ENOTVAR = -49)
      INTEGER(w2f__i4) NF_EPERM
      PARAMETER ( NF_EPERM = -37)
      INTEGER(w2f__i4) NF_ERANGE
      PARAMETER ( NF_ERANGE = -60)
      INTEGER(w2f__i4) NF_ESTRIDE
      PARAMETER ( NF_ESTRIDE = -58)
      INTEGER(w2f__i4) NF_ESTS
      PARAMETER ( NF_ESTS = -52)
      INTEGER(w2f__i4) NF_EUNLIMIT
      PARAMETER ( NF_EUNLIMIT = -54)
      INTEGER(w2f__i4) NF_EUNLIMPOS
      PARAMETER ( NF_EUNLIMPOS = -47)
      INTEGER(w2f__i4) NF_FATAL
      PARAMETER ( NF_FATAL = 1)
      INTEGER(w2f__i4) NF_FILL
      PARAMETER ( NF_FILL = 0)
      INTEGER(w2f__i4) NF_FILL_BYTE
      PARAMETER ( NF_FILL_BYTE = -127)
      INTEGER(w2f__i4) NF_FILL_CHAR
      PARAMETER ( NF_FILL_CHAR = 0)
      REAL(w2f__8) NF_FILL_DOUBLE
      PARAMETER ( NF_FILL_DOUBLE = 9.969209968386869d+36)
      REAL(w2f__4) NF_FILL_FLOAT
      PARAMETER ( NF_FILL_FLOAT = 9.969210d+36)
      INTEGER(w2f__i4) NF_FILL_INT
      PARAMETER ( NF_FILL_INT = -2147483647)
      INTEGER(w2f__i4) NF_FILL_INT1
      PARAMETER ( NF_FILL_INT1 = -127)
      INTEGER(w2f__i4) NF_FILL_INT2
      PARAMETER ( NF_FILL_INT2 = -32767)
      REAL(w2f__4) NF_FILL_REAL
      PARAMETER ( NF_FILL_REAL = 9.969210d+36)
      INTEGER(w2f__i4) NF_FILL_SHORT
      PARAMETER ( NF_FILL_SHORT = -32767)
      INTEGER(w2f__i4) NF_FLOAT
      PARAMETER ( NF_FLOAT = 5)
      INTEGER(w2f__i4) NF_GLOBAL
      PARAMETER ( NF_GLOBAL = 0)
      INTEGER(w2f__i4) NF_INT
      PARAMETER ( NF_INT = 4)
      INTEGER(w2f__i4) NF_INT1
      PARAMETER ( NF_INT1 = 1)
      INTEGER(w2f__i4) NF_INT2
      PARAMETER ( NF_INT2 = 3)
      INTEGER(w2f__i4) NF_LOCK
      PARAMETER ( NF_LOCK = 1024)
      INTEGER(w2f__i4) NF_MAX_ATTRS
      PARAMETER ( NF_MAX_ATTRS = 4096)
      INTEGER(w2f__i4) NF_MAX_DIMS
      PARAMETER ( NF_MAX_DIMS = 512)
      INTEGER(w2f__i4) NF_MAX_NAME
      PARAMETER ( NF_MAX_NAME = 128)
      INTEGER(w2f__i4) NF_MAX_VARS
      PARAMETER ( NF_MAX_VARS = 4096)
      INTEGER(w2f__i4) NF_MAX_VAR_DIMS
      PARAMETER ( NF_MAX_VAR_DIMS = 512)
      INTEGER(w2f__i4) NF_NOCLOBBER
      PARAMETER ( NF_NOCLOBBER = 4)
      INTEGER(w2f__i4) NF_NOERR
      PARAMETER ( NF_NOERR = 0)
      INTEGER(w2f__i4) NF_NOFILL
      PARAMETER ( NF_NOFILL = 256)
      INTEGER(w2f__i4) NF_NOWRITE
      PARAMETER ( NF_NOWRITE = 0)
      INTEGER(w2f__i4) NF_REAL
      PARAMETER ( NF_REAL = 5)
      INTEGER(w2f__i4) NF_SHARE
      PARAMETER ( NF_SHARE = 2048)
      INTEGER(w2f__i4) NF_SHORT
      PARAMETER ( NF_SHORT = 3)
      INTEGER(w2f__i4) NF_SIZEHINT_DEFAULT
      PARAMETER ( NF_SIZEHINT_DEFAULT = 0)
      INTEGER(w2f__i4) NF_UNLIMITED
      PARAMETER ( NF_UNLIMITED = 0)
      INTEGER(w2f__i4) NF_VERBOSE
      PARAMETER ( NF_VERBOSE = 2)
      INTEGER(w2f__i4) NF_WRITE
      PARAMETER ( NF_WRITE = 1)
C
C     **** statements ****
C
      IF(ERRMSG .ne. INT(0_w2f__i8)) THEN
        WRITE(*, *) 'error in netcdf function ', FUNCNAME
      ENDIF
      RETURN
      END SUBROUTINE

      Function lastchar(NAME)
      use w2f__types
      use active_module
      IMPLICIT NONE
C
C     **** Parameters and Result ****
C
      CHARACTER(80) NAME
      INTEGER(w2f__i4) lastchar
C
C     **** statements ****
C
      lastchar = INDEX(NAME, ' ', .FALSE.)
      RETURN
      RETURN
      END FUNCTION

      SUBROUTINE read_data(TIME)
      use w2f__types
      use active_module
      IMPLICIT NONE
C
C     **** Parameters and Result ****
C
      type(active) :: TIME
C
C     **** statements ****
C
      RETURN
      END SUBROUTINE

      SUBROUTINE read_eta_data(TIME)
      use w2f__types
      use active_module
      use size
      use data
      use parms
      IMPLICIT NONE
C
C     **** Parameters and Result ****
C
      type(active) :: TIME
C
C     **** Local Variables and functions ****
C
      type(active) :: F_IN(1 : 20, 1 : 20)
      INTEGER(w2f__i4) IX
      INTEGER(w2f__i4) IY
      CHARACTER(80) MYETA
      CHARACTER(80) MYETADATA
      INTEGER(w2f__i4) MYNX
      INTEGER(w2f__i4) MYNY
      EXTERNAL read_field_netcdf
      EXTERNAL read_snap_netcdf
C
C     **** statements ****
C
      MYNX = 20
      MYNY = 20
      MYETADATA = 'etadata'
      MYETA = 'eta'
      IF (TIME%v .eq. 0.0D00) THEN
        CALL read_field_netcdf(NCDATAFILE,MYETADATA,MYNX,MYNY,F_IN)
        DO IY = 1, 20, 1
          DO IX = 1, 20, 1
            ETA_DATA(INT(IX),INT(IY))%v = F_IN(IX,IY)%v
            CALL setderiv(ETA_DATA(IX,IY),F_IN(IX,IY))
          END DO
        END DO
      ELSE
        IF (TIME%v .GT. 0.0D00) THEN
          CALL read_snap_netcdf(NCDATAFILE,TIME,MYNX,MYNY,MYETA,F_IN)
          DO IY = 1, 20, 1
            DO IX = 1, 20, 1
              ETA_DATA(INT(IX),INT(IY))%v = F_IN(IX,IY)%v
              CALL setderiv(ETA_DATA(IX,IY),F_IN(IX,IY))
            END DO
          END DO
        ELSE
          DO IY = 1, 20, 1
            DO IX = 1, 20, 1
              ETA_DATA(INT(IX),INT(IY))%v = 0.0D00
              CALL zero_deriv(ETA_DATA(INT(IX),INT(IY)))
            END DO
          END DO
        ENDIF
      ENDIF
      RETURN
      END SUBROUTINE

      SUBROUTINE read_uv_data(TIME)
      use w2f__types
      use active_module
      use size
      use data
      use parms
      IMPLICIT NONE
C
C     **** Parameters and Result ****
C
      type(active) :: TIME
C
C     **** Local Variables and functions ****
C
      type(active) :: F_IN(1 : 20, 1 : 20)
      INTEGER(w2f__i4) IX
      INTEGER(w2f__i4) IY
      INTEGER(w2f__i4) MYNX
      SAVE MYNX
      INTEGER(w2f__i4) MYNY
      SAVE MYNY
      EXTERNAL read_field_netcdf
      EXTERNAL read_snap_netcdf
      CHARACTER(80) STRU
      CHARACTER(80) STRUDATA
      CHARACTER(80) STRV
      CHARACTER(80) STRVDATA
C
C     **** Initializers ****
C
      DATA MYNX / 20 /
      DATA MYNY / 20 /
C
C     **** statements ****
C
      STRUDATA = 'udata'
      STRVDATA = 'vdata'
      STRU = 'U'
      STRV = 'V'
      IF (TIME%v .eq. 0.0D00) THEN
        CALL read_field_netcdf(NCDATAFILE,STRUDATA,MYNX,MYNY,F_IN)
        DO IY = 1, 20, 1
          DO IX = 1, 20, 1
            U_DATA(INT(IX),INT(IY))%v = F_IN(IX,IY)%v
            CALL setderiv(U_DATA(IX,IY),F_IN(IX,IY))
          END DO
        END DO
        CALL read_field_netcdf(NCDATAFILE,STRVDATA,MYNX,MYNY,F_IN)
        DO IY = 1, 20, 1
          DO IX = 1, 20, 1
            V_DATA(INT(IX),INT(IY))%v = F_IN(IX,IY)%v
            CALL setderiv(V_DATA(IX,IY),F_IN(IX,IY))
          END DO
        END DO
      ELSE
        IF (TIME%v .GT. 0.0D00) THEN
          CALL read_snap_netcdf(NCDATAFILE,TIME,MYNX,MYNY,STRU,F_IN)
          DO IY = 1, 20, 1
            DO IX = 1, 20, 1
              U_DATA(INT(IX),INT(IY))%v = F_IN(IX,IY)%v
              CALL setderiv(U_DATA(IX,IY),F_IN(IX,IY))
            END DO
          END DO
          CALL read_snap_netcdf(NCDATAFILE,TIME,MYNX,MYNY,STRV,F_IN)
          DO IY = 1, 20, 1
            DO IX = 1, 20, 1
              V_DATA(INT(IX),INT(IY))%v = F_IN(IX,IY)%v
              CALL setderiv(V_DATA(IX,IY),F_IN(IX,IY))
            END DO
          END DO
        ELSE
          DO IY = 1, 20, 1
            DO IX = 1, 20, 1
              U_DATA(INT(IX),INT(IY))%v = 0.0D00
              V_DATA(INT(IX),INT(IY))%v = 0.0D00
              CALL zero_deriv(U_DATA(INT(IX),INT(IY)))
              CALL zero_deriv(V_DATA(INT(IX),INT(IY)))
            END DO
          END DO
        ENDIF
      ENDIF
      RETURN
      END SUBROUTINE

      SUBROUTINE read_zonal_transport_data(TIME)
      use w2f__types
      use active_module
      use size
      use data
      use pfields
      use vars
      IMPLICIT NONE
C
C     **** Global Variables ****
C
      REAL(w2f__8) OpenAD_Symbol_180
      REAL(w2f__8) OpenAD_Symbol_181
      REAL(w2f__8) OpenAD_Symbol_182
      REAL(w2f__8) OpenAD_Symbol_183
      REAL(w2f__8) OpenAD_Symbol_179
      REAL(w2f__8) OpenAD_Symbol_184
      REAL(w2f__8) OpenAD_Symbol_185
      REAL(w2f__8) OpenAD_Symbol_186
      type(active) :: OpenAD_Symbol_860
      REAL(w2f__8) OpenAD_Symbol_861
      REAL(w2f__8) OpenAD_Symbol_862
      type(active) :: OpenAD_Symbol_863
      REAL(w2f__8) OpenAD_Symbol_859
      REAL(w2f__8) OpenAD_Symbol_864
      type(active) :: OpenAD_Symbol_865
      REAL(w2f__8) OpenAD_Symbol_866
      type(active) :: OpenAD_Symbol_867
C
C     **** Parameters and Result ****
C
      type(active) :: TIME
C
C     **** Local Variables and functions ****
C
      INTEGER(w2f__i4) IX
      INTEGER(w2f__i4) IY
      type(active) :: ZONAL_TRANSPORT
C
C     **** statements ****
C
      IF (TIME%v .eq. 0.0D00) THEN
        ZONAL_TRANSPORT_DATA%v = 5.26265D+07
        CALL zero_deriv(ZONAL_TRANSPORT_DATA)
      ELSE
        IX = 6
        ZONAL_TRANSPORT%v = 0.0D00
        CALL zero_deriv(ZONAL_TRANSPORT)
        DO IY = 1, 20, 1
          OpenAD_Symbol_181 = (DY(IY)%v*U(IX,IY)%v)
          OpenAD_Symbol_186 = (ZONAL_TRANSPORT%v+HU(IX,IY)%v*OpenAD_Symb
     +ol_181)
          OpenAD_Symbol_179 = 1_w2f__i8
          OpenAD_Symbol_182 = OpenAD_Symbol_181
          OpenAD_Symbol_184 = U(IX,IY)%v
          OpenAD_Symbol_185 = DY(IY)%v
          OpenAD_Symbol_183 = HU(IX,IY)%v
          OpenAD_Symbol_180 = 1_w2f__i8
          ZONAL_TRANSPORT%v = OpenAD_Symbol_186
          OpenAD_Symbol_859 = (OpenAD_Symbol_182 * OpenAD_Symbol_180)
          OpenAD_Symbol_861 = (OpenAD_Symbol_183 * OpenAD_Symbol_180)
          OpenAD_Symbol_862 = (OpenAD_Symbol_184 * OpenAD_Symbol_861)
          OpenAD_Symbol_864 = (OpenAD_Symbol_185 * OpenAD_Symbol_861)
          OpenAD_Symbol_866 = OpenAD_Symbol_179
          CALL setderiv(OpenAD_Symbol_867,ZONAL_TRANSPORT)
          CALL setderiv(OpenAD_Symbol_865,U(IX,IY))
          CALL setderiv(OpenAD_Symbol_863,DY(IY))
          CALL setderiv(OpenAD_Symbol_860,HU(IX,IY))
          CALL sax(OpenAD_Symbol_859,OpenAD_Symbol_860,ZONAL_TRANSPORT)
          CALL saxpy(OpenAD_Symbol_862,OpenAD_Symbol_863,ZONAL_TRANSPORT
     +)
          CALL saxpy(OpenAD_Symbol_864,OpenAD_Symbol_865,ZONAL_TRANSPORT
     +)
          CALL saxpy(OpenAD_Symbol_866,OpenAD_Symbol_867,ZONAL_TRANSPORT
     +)
        END DO
        ZONAL_TRANSPORT_DATA%v = ZONAL_TRANSPORT%v
        CALL setderiv(ZONAL_TRANSPORT_DATA,ZONAL_TRANSPORT)
      ENDIF
      RETURN
      END SUBROUTINE

      SUBROUTINE read_depth_data()
      use w2f__types
      use active_module
      use size
      use pfields
      use data
      IMPLICIT NONE
C
C     **** Local Variables and functions ****
C
      INTEGER(w2f__i4) IX
      INTEGER(w2f__i4) IY
C
C     **** statements ****
C
      DO IY = 1, 20, 1
        DO IX = 1, 20, 1
          DEPTH_DATA(INT(IX),INT(IY))%v = INIDEPTH(IX,IY)%v
          CALL setderiv(DEPTH_DATA(IX,IY),INIDEPTH(IX,IY))
        END DO
      END DO
      RETURN
      END SUBROUTINE

      SUBROUTINE determine_data_time(NCDATAFILE)
      use w2f__types
      use active_module
      use size
      use data
      IMPLICIT NONE
C
C     **** Parameters and Result ****
C
      CHARACTER(80) NCDATAFILE
C
C     **** Local Variables and functions ****
C
      EXTERNAL get_length_netcdf
      INTEGER(w2f__i4) K
      EXTERNAL read_vector_netcdf
      CHARACTER(80) STRTIME
C
C     **** statements ****
C
      STRTIME = 'TIME'
      CALL get_length_netcdf(NCDATAFILE, STRTIME, NEDT)
      IF(NEDT .GT. INT(1000_w2f__i8)) THEN
        WRITE(*, *) 'determine_data_time: too many data,;'
        WRITE(*, *) 'increase nedtmax to ', NEDT
      ELSE
        IF(NEDT .LE. INT(0_w2f__i8)) THEN
          WRITE(*, *) 'no time dependent data found in ' // NCDATAFILE
        ELSE
          CALL read_vector_netcdf(NCDATAFILE,STRTIME,NEDT,ETA_DATA_TIME)
          WRITE(*, *) 'determine_data_time: # of data times = ', NEDT
        ENDIF
      ENDIF
      WRITE(*, *)(ETA_DATA_TIME(K), K = 1, NEDT, 1)
      RETURN
      END SUBROUTINE

      SUBROUTINE is_eta_data_time(TIME, RESULT)
      use w2f__types
      use active_module
      use size
      use data
      IMPLICIT NONE
C
C     **** Parameters and Result ****
C
      type(active) :: TIME
      LOGICAL(w2f__i4) RESULT
C
C     **** Local Variables and functions ****
C
      LOGICAL(w2f__i4) ALLDONE
      INTEGER(w2f__i4) IT
      LOGICAL(w2f__i4) t__98
C
C     **** statements ****
C
      ALLDONE = .FALSE.
      RESULT = .FALSE.
      IT = 1
      t__98 = .NOT. ALLDONE
      DO WHILE(t__98)
        IF (ABS(ETA_DATA_TIME(IT)%v-TIME%v) .LT. 1.00000000000000002092D
     +-08) THEN
          RESULT = .TRUE.
          ALLDONE = .TRUE.
        ELSE
          IF(IT .LT. NEDT) THEN
            IT = IT + 1
          ELSE
            ALLDONE = .TRUE.
          ENDIF
        ENDIF
        t__98 = .NOT. ALLDONE
      END DO
      RETURN
      END SUBROUTINE

      SUBROUTINE make_weights()
      use w2f__types
      use active_module
      IMPLICIT NONE
C
C     **** Local Variables and functions ****
C
      EXTERNAL make_weights_depth
      EXTERNAL make_weights_eta
      EXTERNAL make_weights_graddepth
      EXTERNAL make_weights_lapldepth
      EXTERNAL make_weights_uv
      EXTERNAL make_weights_zonal_transport
C
C     **** statements ****
C
      CALL make_weights_depth()
      CALL make_weights_eta()
      CALL make_weights_uv()
      CALL make_weights_zonal_transport()
      CALL make_weights_lapldepth()
      CALL make_weights_graddepth()
      RETURN
      END SUBROUTINE

      SUBROUTINE make_weights_depth()
      use w2f__types
      use active_module
      use size
      use pfields
      use weights
      IMPLICIT NONE
C
C     **** Global Variables ****
C
      REAL(w2f__8) OpenAD_Symbol_201
      REAL(w2f__8) OpenAD_Symbol_202
      REAL(w2f__8) OpenAD_Symbol_203
      REAL(w2f__8) OpenAD_Symbol_204
      REAL(w2f__8) OpenAD_Symbol_190
      REAL(w2f__8) OpenAD_Symbol_191
      REAL(w2f__8) OpenAD_Symbol_187
      REAL(w2f__8) OpenAD_Symbol_192
      REAL(w2f__8) OpenAD_Symbol_188
      REAL(w2f__8) OpenAD_Symbol_193
      REAL(w2f__8) OpenAD_Symbol_189
      REAL(w2f__8) OpenAD_Symbol_194
      REAL(w2f__8) OpenAD_Symbol_195
      REAL(w2f__8) OpenAD_Symbol_196
      REAL(w2f__8) OpenAD_Symbol_197
      REAL(w2f__8) OpenAD_Symbol_198
      REAL(w2f__8) OpenAD_Symbol_870
      REAL(w2f__8) OpenAD_Symbol_871
      REAL(w2f__8) OpenAD_Symbol_872
      REAL(w2f__8) OpenAD_Symbol_868
      REAL(w2f__8) OpenAD_Symbol_873
      type(active) :: OpenAD_Symbol_869
      type(active) :: OpenAD_Symbol_874
      REAL(w2f__8) OpenAD_Symbol_875
      REAL(w2f__8) OpenAD_Symbol_880
      type(active) :: OpenAD_Symbol_876
      type(active) :: OpenAD_Symbol_881
      REAL(w2f__8) OpenAD_Symbol_877
      REAL(w2f__8) OpenAD_Symbol_878
      type(active) :: OpenAD_Symbol_879
C
C     **** Local Variables and functions ****
C
      type(active) :: ERROR_DEPTH
      INTEGER(w2f__i4) IX
      INTEGER(w2f__i4) IY
      INTEGER(w2f__i4) JX
      INTEGER(w2f__i4) JY
      INTEGER(w2f__i4) MYNX
      SAVE MYNX
      INTEGER(w2f__i4) MYNY
      SAVE MYNY
      INTEGER(w2f__i4) NFLAG
      type(active) :: OFFDIAG
      EXTERNAL read_weight_depth_netcdf
      CHARACTER(80) STRW
      CHARACTER(80) STRWD
C
C     **** Initializers ****
C
      DATA MYNX / 20 /
      DATA MYNY / 20 /
C
C     **** statements ****
C
      STRWD = 'weights_depth.nc'
      STRW = 'W'
      NFLAG = 0
      CALL read_weight_depth_netcdf(STRWD,STRW,WEIGHT_DEPTH,MYNX,MYNY,NF
     +LAG)
      IF(NFLAG .LT. INT(0_w2f__i8)) THEN
        OFFDIAG%v = 0.0D00
        CALL zero_deriv(OFFDIAG)
        DO IY = 1, 20, 1
          DO IX = 1, 20, 1
            WEIGHT_DEPTH(INT(IX),INT(IX),INT(IY),INT(IY))%v = 1.0D00
            CALL zero_deriv(WEIGHT_DEPTH(INT(IX),INT(IX),INT(IY),INT(IY)
     +))
            IF(IX .GT. INT(1_w2f__i8)) THEN
              WEIGHT_DEPTH(INT(IX),INT(IX+(-1)),INT(IY),INT(IY))%v = OFF
     +DIAG%v
              CALL setderiv(WEIGHT_DEPTH(IX,IX+(-1),IY,IY),OFFDIAG)
            ENDIF
            IF(IX .LT. INT(20_w2f__i8)) THEN
              WEIGHT_DEPTH(INT(IX),INT(IX+1),INT(IY),INT(IY))%v = OFFDIA
     +G%v
              CALL setderiv(WEIGHT_DEPTH(IX,IX+1,IY,IY),OFFDIAG)
            ENDIF
            IF(IY .GT. INT(1_w2f__i8)) THEN
              WEIGHT_DEPTH(INT(IX),INT(IX),INT(IY),INT(IY+(-1)))%v = OFF
     +DIAG%v
              CALL setderiv(WEIGHT_DEPTH(IX,IX,IY,IY+(-1)),OFFDIAG)
            ENDIF
            IF(IY .LT. INT(20_w2f__i8)) THEN
              WEIGHT_DEPTH(INT(IX),INT(IX),INT(IY),INT(IY+1))%v = OFFDIA
     +G%v
              CALL setderiv(WEIGHT_DEPTH(IX,IX,IY,IY+1),OFFDIAG)
            ENDIF
          END DO
        END DO
      ENDIF
      ERROR_DEPTH%v = 1.0D00
      CALL zero_deriv(ERROR_DEPTH)
      DO IY = 1, 20, 1
        DO JY = 1, 20, 1
          DO IX = 1, 20, 1
            DO JX = 1, 20, 1
              OpenAD_Symbol_197 = (1.0D00/ERROR_DEPTH%v)
              OpenAD_Symbol_193 = (OpenAD_Symbol_197 ** INT(2_w2f__i8))
              OpenAD_Symbol_194 = (WEIGHT_DEPTH(IX,JX,IY,JY)%v*WF_DEPTH%
     +v)
              OpenAD_Symbol_190 = (OpenAD_Symbol_193 *
     >  OpenAD_Symbol_194)
              OpenAD_Symbol_187 = (ETAMASK(IX,IY)%v*OpenAD_Symbol_190)
              OpenAD_Symbol_204 = (ETAMASK(JX,JY)%v*OpenAD_Symbol_187)
              OpenAD_Symbol_188 = OpenAD_Symbol_187
              OpenAD_Symbol_191 = OpenAD_Symbol_190
              OpenAD_Symbol_201 = (-(1.0D00/(ERROR_DEPTH%v*ERROR_DEPTH%v
     +)))
              OpenAD_Symbol_198 = (INT(2_w2f__i8) *(OpenAD_Symbol_197
     >  **(INT(2_w2f__i8) - INT(1_w2f__i8))))
              OpenAD_Symbol_195 = OpenAD_Symbol_194
              OpenAD_Symbol_202 = WF_DEPTH%v
              OpenAD_Symbol_203 = WEIGHT_DEPTH(IX,JX,IY,JY)%v
              OpenAD_Symbol_196 = OpenAD_Symbol_193
              OpenAD_Symbol_192 = ETAMASK(IX,IY)%v
              OpenAD_Symbol_189 = ETAMASK(JX,JY)%v
              WEIGHT_DEPTH(INT(IX),INT(JX),INT(IY),INT(JY))%v = OpenAD_S
     +ymbol_204
              OpenAD_Symbol_868 = (OpenAD_Symbol_191 *
     >  OpenAD_Symbol_189)
              OpenAD_Symbol_870 = (OpenAD_Symbol_192 *
     >  OpenAD_Symbol_189)
              OpenAD_Symbol_871 = (OpenAD_Symbol_195 *
     >  OpenAD_Symbol_870)
              OpenAD_Symbol_872 = (OpenAD_Symbol_196 *
     >  OpenAD_Symbol_870)
              OpenAD_Symbol_873 = (OpenAD_Symbol_202 *
     >  OpenAD_Symbol_872)
              OpenAD_Symbol_875 = (OpenAD_Symbol_203 *
     >  OpenAD_Symbol_872)
              OpenAD_Symbol_877 = (OpenAD_Symbol_198 *
     >  OpenAD_Symbol_871)
              OpenAD_Symbol_878 = (OpenAD_Symbol_201 *
     >  OpenAD_Symbol_877)
              OpenAD_Symbol_880 = OpenAD_Symbol_188
              CALL setderiv(OpenAD_Symbol_881,ETAMASK(JX,JY))
              CALL setderiv(OpenAD_Symbol_879,ERROR_DEPTH)
              CALL setderiv(OpenAD_Symbol_876,WF_DEPTH)
              CALL setderiv(OpenAD_Symbol_874,WEIGHT_DEPTH(IX,JX,IY,JY))
              CALL setderiv(OpenAD_Symbol_869,ETAMASK(IX,IY))
              CALL sax(OpenAD_Symbol_868,OpenAD_Symbol_869,WEIGHT_DEPTH(
     +IX,JX,IY,JY))
              CALL saxpy(OpenAD_Symbol_873,OpenAD_Symbol_874,WEIGHT_DEPT
     +H(IX,JX,IY,JY))
              CALL saxpy(OpenAD_Symbol_875,OpenAD_Symbol_876,WEIGHT_DEPT
     +H(IX,JX,IY,JY))
              CALL saxpy(OpenAD_Symbol_878,OpenAD_Symbol_879,WEIGHT_DEPT
     +H(IX,JX,IY,JY))
              CALL saxpy(OpenAD_Symbol_880,OpenAD_Symbol_881,WEIGHT_DEPT
     +H(IX,JX,IY,JY))
            END DO
          END DO
        END DO
      END DO
      RETURN
      END SUBROUTINE

      SUBROUTINE make_weights_eta()
      use w2f__types
      use active_module
      use size
      use pfields
      use weights
      IMPLICIT NONE
C
C     **** Global Variables ****
C
      REAL(w2f__8) OpenAD_Symbol_205
      REAL(w2f__8) OpenAD_Symbol_210
      REAL(w2f__8) OpenAD_Symbol_206
      REAL(w2f__8) OpenAD_Symbol_211
      REAL(w2f__8) OpenAD_Symbol_207
      REAL(w2f__8) OpenAD_Symbol_212
      REAL(w2f__8) OpenAD_Symbol_208
      REAL(w2f__8) OpenAD_Symbol_209
      REAL(w2f__8) OpenAD_Symbol_215
      REAL(w2f__8) OpenAD_Symbol_216
      REAL(w2f__8) OpenAD_Symbol_882
      REAL(w2f__8) OpenAD_Symbol_883
      REAL(w2f__8) OpenAD_Symbol_884
      type(active) :: OpenAD_Symbol_885
      REAL(w2f__8) OpenAD_Symbol_886
      type(active) :: OpenAD_Symbol_887
      REAL(w2f__8) OpenAD_Symbol_888
      type(active) :: OpenAD_Symbol_889
C
C     **** Local Variables and functions ****
C
      type(active) :: ERROR_ETA
      INTEGER(w2f__i4) IX
      INTEGER(w2f__i4) IY
C
C     **** statements ****
C
      ERROR_ETA%v = 1.0D00
      CALL zero_deriv(ERROR_ETA)
      DO IY = 1, 20, 1
        DO IX = 1, 20, 1
          OpenAD_Symbol_211 = (1.0D00/ERROR_ETA%v)
          OpenAD_Symbol_208 = (OpenAD_Symbol_211 ** INT(2_w2f__i8))
          OpenAD_Symbol_205 = (WF_ETA%v*OpenAD_Symbol_208)
          OpenAD_Symbol_216 = (ETAMASK(IX,IY)%v*OpenAD_Symbol_205)
          OpenAD_Symbol_206 = OpenAD_Symbol_205
          OpenAD_Symbol_209 = OpenAD_Symbol_208
          OpenAD_Symbol_215 = (-(1.0D00/(ERROR_ETA%v*ERROR_ETA%v)))
          OpenAD_Symbol_212 = (INT(2_w2f__i8) *(OpenAD_Symbol_211 **(
     > INT(2_w2f__i8) - INT(1_w2f__i8))))
          OpenAD_Symbol_210 = WF_ETA%v
          OpenAD_Symbol_207 = ETAMASK(IX,IY)%v
          WEIGHT_ETA(INT(IX),INT(IY))%v = OpenAD_Symbol_216
          OpenAD_Symbol_882 = (OpenAD_Symbol_215 * OpenAD_Symbol_212)
          OpenAD_Symbol_883 = (OpenAD_Symbol_882 * OpenAD_Symbol_210)
          OpenAD_Symbol_884 = (OpenAD_Symbol_209 * OpenAD_Symbol_207)
          OpenAD_Symbol_886 = (OpenAD_Symbol_883 * OpenAD_Symbol_207)
          OpenAD_Symbol_888 = OpenAD_Symbol_206
          CALL setderiv(OpenAD_Symbol_889,ETAMASK(IX,IY))
          CALL setderiv(OpenAD_Symbol_887,ERROR_ETA)
          CALL setderiv(OpenAD_Symbol_885,WF_ETA)
          CALL sax(OpenAD_Symbol_884,OpenAD_Symbol_885,WEIGHT_ETA(IX,IY)
     +)
          CALL saxpy(OpenAD_Symbol_886,OpenAD_Symbol_887,WEIGHT_ETA(IX,I
     +Y))
          CALL saxpy(OpenAD_Symbol_888,OpenAD_Symbol_889,WEIGHT_ETA(IX,I
     +Y))
        END DO
      END DO
      RETURN
      END SUBROUTINE

      SUBROUTINE make_weights_uv()
      use w2f__types
      use active_module
      use size
      use pfields
      use weights
      IMPLICIT NONE
C
C     **** Global Variables ****
C
      REAL(w2f__8) OpenAD_Symbol_220
      REAL(w2f__8) OpenAD_Symbol_221
      REAL(w2f__8) OpenAD_Symbol_217
      REAL(w2f__8) OpenAD_Symbol_222
      REAL(w2f__8) OpenAD_Symbol_218
      REAL(w2f__8) OpenAD_Symbol_223
      REAL(w2f__8) OpenAD_Symbol_219
      REAL(w2f__8) OpenAD_Symbol_224
      REAL(w2f__8) OpenAD_Symbol_230
      REAL(w2f__8) OpenAD_Symbol_231
      REAL(w2f__8) OpenAD_Symbol_227
      REAL(w2f__8) OpenAD_Symbol_232
      REAL(w2f__8) OpenAD_Symbol_228
      REAL(w2f__8) OpenAD_Symbol_233
      REAL(w2f__8) OpenAD_Symbol_229
      REAL(w2f__8) OpenAD_Symbol_234
      REAL(w2f__8) OpenAD_Symbol_235
      REAL(w2f__8) OpenAD_Symbol_240
      REAL(w2f__8) OpenAD_Symbol_236
      REAL(w2f__8) OpenAD_Symbol_239
      REAL(w2f__8) OpenAD_Symbol_900
      type(active) :: OpenAD_Symbol_901
      REAL(w2f__8) OpenAD_Symbol_902
      type(active) :: OpenAD_Symbol_903
      REAL(w2f__8) OpenAD_Symbol_904
      type(active) :: OpenAD_Symbol_905
      REAL(w2f__8) OpenAD_Symbol_890
      REAL(w2f__8) OpenAD_Symbol_891
      REAL(w2f__8) OpenAD_Symbol_892
      type(active) :: OpenAD_Symbol_893
      REAL(w2f__8) OpenAD_Symbol_894
      type(active) :: OpenAD_Symbol_895
      REAL(w2f__8) OpenAD_Symbol_896
      type(active) :: OpenAD_Symbol_897
      REAL(w2f__8) OpenAD_Symbol_898
      REAL(w2f__8) OpenAD_Symbol_899
C
C     **** Local Variables and functions ****
C
      type(active) :: ERROR_U
      type(active) :: ERROR_V
      INTEGER(w2f__i4) IX
      INTEGER(w2f__i4) IY
C
C     **** statements ****
C
      ERROR_U%v = 1.0D00
      ERROR_V%v = 1.0D00
      CALL zero_deriv(ERROR_U)
      CALL zero_deriv(ERROR_V)
      DO IY = 1, 20, 1
        DO IX = 1, 20, 1
          OpenAD_Symbol_223 = (1.0D00/ERROR_U%v)
          OpenAD_Symbol_220 = (OpenAD_Symbol_223 ** INT(2_w2f__i8))
          OpenAD_Symbol_217 = (WF_U%v*OpenAD_Symbol_220)
          OpenAD_Symbol_228 = (UMASK(IX,IY)%v*OpenAD_Symbol_217)
          OpenAD_Symbol_218 = OpenAD_Symbol_217
          OpenAD_Symbol_221 = OpenAD_Symbol_220
          OpenAD_Symbol_227 = (-(1.0D00/(ERROR_U%v*ERROR_U%v)))
          OpenAD_Symbol_224 = (INT(2_w2f__i8) *(OpenAD_Symbol_223 **(
     > INT(2_w2f__i8) - INT(1_w2f__i8))))
          OpenAD_Symbol_222 = WF_U%v
          OpenAD_Symbol_219 = UMASK(IX,IY)%v
          WEIGHT_U(INT(IX),INT(IY))%v = OpenAD_Symbol_228
          OpenAD_Symbol_890 = (OpenAD_Symbol_227 * OpenAD_Symbol_224)
          OpenAD_Symbol_891 = (OpenAD_Symbol_890 * OpenAD_Symbol_222)
          OpenAD_Symbol_892 = (OpenAD_Symbol_221 * OpenAD_Symbol_219)
          OpenAD_Symbol_894 = (OpenAD_Symbol_891 * OpenAD_Symbol_219)
          OpenAD_Symbol_896 = OpenAD_Symbol_218
          CALL setderiv(OpenAD_Symbol_897,UMASK(IX,IY))
          CALL setderiv(OpenAD_Symbol_895,ERROR_U)
          CALL setderiv(OpenAD_Symbol_893,WF_U)
          CALL sax(OpenAD_Symbol_892,OpenAD_Symbol_893,WEIGHT_U(IX,IY))
          CALL saxpy(OpenAD_Symbol_894,OpenAD_Symbol_895,WEIGHT_U(IX,IY)
     +)
          CALL saxpy(OpenAD_Symbol_896,OpenAD_Symbol_897,WEIGHT_U(IX,IY)
     +)
          OpenAD_Symbol_235 = (1.0D00/ERROR_V%v)
          OpenAD_Symbol_232 = (OpenAD_Symbol_235 ** INT(2_w2f__i8))
          OpenAD_Symbol_229 = (WF_V%v*OpenAD_Symbol_232)
          OpenAD_Symbol_240 = (VMASK(IX,IY)%v*OpenAD_Symbol_229)
          OpenAD_Symbol_230 = OpenAD_Symbol_229
          OpenAD_Symbol_233 = OpenAD_Symbol_232
          OpenAD_Symbol_239 = (-(1.0D00/(ERROR_V%v*ERROR_V%v)))
          OpenAD_Symbol_236 = (INT(2_w2f__i8) *(OpenAD_Symbol_235 **(
     > INT(2_w2f__i8) - INT(1_w2f__i8))))
          OpenAD_Symbol_234 = WF_V%v
          OpenAD_Symbol_231 = VMASK(IX,IY)%v
          WEIGHT_V(INT(IX),INT(IY))%v = OpenAD_Symbol_240
          OpenAD_Symbol_898 = (OpenAD_Symbol_239 * OpenAD_Symbol_236)
          OpenAD_Symbol_899 = (OpenAD_Symbol_898 * OpenAD_Symbol_234)
          OpenAD_Symbol_900 = (OpenAD_Symbol_233 * OpenAD_Symbol_231)
          OpenAD_Symbol_902 = (OpenAD_Symbol_899 * OpenAD_Symbol_231)
          OpenAD_Symbol_904 = OpenAD_Symbol_230
          CALL setderiv(OpenAD_Symbol_905,VMASK(IX,IY))
          CALL setderiv(OpenAD_Symbol_903,ERROR_V)
          CALL setderiv(OpenAD_Symbol_901,WF_V)
          CALL sax(OpenAD_Symbol_900,OpenAD_Symbol_901,WEIGHT_V(IX,IY))
          CALL saxpy(OpenAD_Symbol_902,OpenAD_Symbol_903,WEIGHT_V(IX,IY)
     +)
          CALL saxpy(OpenAD_Symbol_904,OpenAD_Symbol_905,WEIGHT_V(IX,IY)
     +)
        END DO
      END DO
      RETURN
      END SUBROUTINE

      SUBROUTINE make_weights_zonal_transport()
      use w2f__types
      use active_module
      use size
      use weights
      IMPLICIT NONE
C
C     **** Global Variables ****
C
      REAL(w2f__8) OpenAD_Symbol_241
      REAL(w2f__8) OpenAD_Symbol_242
      REAL(w2f__8) OpenAD_Symbol_243
      REAL(w2f__8) OpenAD_Symbol_244
      REAL(w2f__8) OpenAD_Symbol_245
      REAL(w2f__8) OpenAD_Symbol_248
      REAL(w2f__8) OpenAD_Symbol_249
      type(active) :: OpenAD_Symbol_910
      REAL(w2f__8) OpenAD_Symbol_906
      REAL(w2f__8) OpenAD_Symbol_907
      type(active) :: OpenAD_Symbol_908
      REAL(w2f__8) OpenAD_Symbol_909
C
C     **** Local Variables and functions ****
C
      type(active) :: ERROR_ZONAL_TRANSPORT
C
C     **** statements ****
C
      ERROR_ZONAL_TRANSPORT%v = 1.0D+06
      CALL zero_deriv(ERROR_ZONAL_TRANSPORT)
      OpenAD_Symbol_244 = (1.0D00/ERROR_ZONAL_TRANSPORT%v)
      OpenAD_Symbol_241 = (OpenAD_Symbol_244 ** INT(2_w2f__i8))
      OpenAD_Symbol_249 = (WF_ZONAL_TRANSPORT%v*OpenAD_Symbol_241)
      OpenAD_Symbol_242 = OpenAD_Symbol_241
      OpenAD_Symbol_248 = (-(1.0D00/(ERROR_ZONAL_TRANSPORT%v*ERROR_ZONAL
     +_TRANSPORT%v)))
      OpenAD_Symbol_245 = (INT(2_w2f__i8) *(OpenAD_Symbol_244 **(INT(
     > 2_w2f__i8) - INT(1_w2f__i8))))
      OpenAD_Symbol_243 = WF_ZONAL_TRANSPORT%v
      WEIGHT_ZONAL_TRANSPORT%v = OpenAD_Symbol_249
      OpenAD_Symbol_906 = (OpenAD_Symbol_248 * OpenAD_Symbol_245)
      OpenAD_Symbol_907 = (OpenAD_Symbol_906 * OpenAD_Symbol_243)
      OpenAD_Symbol_909 = OpenAD_Symbol_242
      CALL setderiv(OpenAD_Symbol_910,WF_ZONAL_TRANSPORT)
      CALL setderiv(OpenAD_Symbol_908,ERROR_ZONAL_TRANSPORT)
      CALL sax(OpenAD_Symbol_907,OpenAD_Symbol_908,WEIGHT_ZONAL_TRANSPOR
     +T)
      CALL saxpy(OpenAD_Symbol_909,OpenAD_Symbol_910,WEIGHT_ZONAL_TRANSP
     +ORT)
      RETURN
      END SUBROUTINE

      SUBROUTINE make_bounds_for_x(NC, LOWER_BOUND, UPPER_BOUND)
      use w2f__types
      use active_module
      use size
      use pfields
      IMPLICIT NONE
C
C     **** Global Variables ****
C
      REAL(w2f__8) OpenAD_Symbol_274
      REAL(w2f__8) OpenAD_Symbol_275
      REAL(w2f__8) OpenAD_Symbol_276
      REAL(w2f__8) OpenAD_Symbol_277
      REAL(w2f__8) OpenAD_Symbol_278
      REAL(w2f__8) OpenAD_Symbol_279
      type(active) :: OpenAD_Symbol_930
      REAL(w2f__8) OpenAD_Symbol_931
      REAL(w2f__8) OpenAD_Symbol_927
      type(active) :: OpenAD_Symbol_932
      type(active) :: OpenAD_Symbol_928
      REAL(w2f__8) OpenAD_Symbol_933
      REAL(w2f__8) OpenAD_Symbol_929
      type(active) :: OpenAD_Symbol_934
C
C     **** Parameters and Result ****
C
      INTEGER(w2f__i4) NC
      type(active) :: LOWER_BOUND(1 : NC)
      type(active) :: UPPER_BOUND(1 : NC)
C
C     **** Local Variables and functions ****
C
      INTEGER(w2f__i8) t__99
      INTEGER(w2f__i8) t__100
      INTEGER(w2f__i4) IX
      INTEGER(w2f__i4) IY
      INTEGER(w2f__i4) K
      type(active) :: LB
      type(active) :: UB
C
C     **** statements ****
C
      t__99 = NC
      t__100 = MAX(t__99, 0_w2f__i8)
      UB%v = 5.0D+01
      LB%v = (-5.0D+01)
      CALL zero_deriv(UB)
      CALL zero_deriv(LB)
      DO IY = 1, 20, 1
        DO IX = 1, 20, 1
          IF (ETAMASK(IX,IY)%v .ne. 0.0D00) THEN
            K = K + 1
            OpenAD_Symbol_276 = (UB%v/INIDEPTH(IX,IY)%v)
            OpenAD_Symbol_274 = (INT(1 _w2f__i8)/INIDEPTH(IX,IY)%v)
            OpenAD_Symbol_275 = (-(UB%v/(INIDEPTH(IX,IY)%v*INIDEPTH(IX,I
     +Y)%v)))
            UPPER_BOUND(INT(K))%v = OpenAD_Symbol_276
            OpenAD_Symbol_927 = OpenAD_Symbol_274
            OpenAD_Symbol_929 = OpenAD_Symbol_275
            CALL setderiv(OpenAD_Symbol_930,INIDEPTH(IX,IY))
            CALL setderiv(OpenAD_Symbol_928,UB)
            CALL sax(OpenAD_Symbol_927,OpenAD_Symbol_928,UPPER_BOUND(K))
            CALL saxpy(OpenAD_Symbol_929,OpenAD_Symbol_930,UPPER_BOUND(K
     +))
            OpenAD_Symbol_279 = (LB%v/INIDEPTH(IX,IY)%v)
            OpenAD_Symbol_277 = (INT(1 _w2f__i8)/INIDEPTH(IX,IY)%v)
            OpenAD_Symbol_278 = (-(LB%v/(INIDEPTH(IX,IY)%v*INIDEPTH(IX,I
     +Y)%v)))
            LOWER_BOUND(INT(K))%v = OpenAD_Symbol_279
            OpenAD_Symbol_931 = OpenAD_Symbol_277
            OpenAD_Symbol_933 = OpenAD_Symbol_278
            CALL setderiv(OpenAD_Symbol_934,INIDEPTH(IX,IY))
            CALL setderiv(OpenAD_Symbol_932,LB)
            CALL sax(OpenAD_Symbol_931,OpenAD_Symbol_932,LOWER_BOUND(K))
            CALL saxpy(OpenAD_Symbol_933,OpenAD_Symbol_934,LOWER_BOUND(K
     +))
          ENDIF
        END DO
      END DO
      RETURN
      END SUBROUTINE

      SUBROUTINE make_weights_lapldepth()
      use w2f__types
      use active_module
      use size
      use pfields
      use weights
      IMPLICIT NONE
C
C     **** Global Variables ****
C
      REAL(w2f__8) OpenAD_Symbol_250
      REAL(w2f__8) OpenAD_Symbol_251
      REAL(w2f__8) OpenAD_Symbol_252
      REAL(w2f__8) OpenAD_Symbol_253
      REAL(w2f__8) OpenAD_Symbol_254
      REAL(w2f__8) OpenAD_Symbol_255
      REAL(w2f__8) OpenAD_Symbol_260
      REAL(w2f__8) OpenAD_Symbol_256
      REAL(w2f__8) OpenAD_Symbol_261
      REAL(w2f__8) OpenAD_Symbol_257
      REAL(w2f__8) OpenAD_Symbol_911
      REAL(w2f__8) OpenAD_Symbol_912
      REAL(w2f__8) OpenAD_Symbol_913
      type(active) :: OpenAD_Symbol_914
      REAL(w2f__8) OpenAD_Symbol_915
      type(active) :: OpenAD_Symbol_916
      REAL(w2f__8) OpenAD_Symbol_917
      type(active) :: OpenAD_Symbol_918
C
C     **** Local Variables and functions ****
C
      type(active) :: ERROR
      INTEGER(w2f__i4) IX
      INTEGER(w2f__i4) IY
C
C     **** statements ****
C
      ERROR%v = 1.0D00
      CALL zero_deriv(ERROR)
      DO IY = 1, 20, 1
        DO IX = 1, 20, 1
          OpenAD_Symbol_256 = (1.0D00/ERROR%v)
          OpenAD_Symbol_253 = (OpenAD_Symbol_256 ** INT(2_w2f__i8))
          OpenAD_Symbol_250 = (WF_LAPLDEPTH%v*OpenAD_Symbol_253)
          OpenAD_Symbol_261 = (ETAMASK(IX,IY)%v*OpenAD_Symbol_250)
          OpenAD_Symbol_251 = OpenAD_Symbol_250
          OpenAD_Symbol_254 = OpenAD_Symbol_253
          OpenAD_Symbol_260 = (-(1.0D00/(ERROR%v*ERROR%v)))
          OpenAD_Symbol_257 = (INT(2_w2f__i8) *(OpenAD_Symbol_256 **(
     > INT(2_w2f__i8) - INT(1_w2f__i8))))
          OpenAD_Symbol_255 = WF_LAPLDEPTH%v
          OpenAD_Symbol_252 = ETAMASK(IX,IY)%v
          WEIGHT_LAPLDEPTH(INT(IX),INT(IY))%v = OpenAD_Symbol_261
          OpenAD_Symbol_911 = (OpenAD_Symbol_260 * OpenAD_Symbol_257)
          OpenAD_Symbol_912 = (OpenAD_Symbol_911 * OpenAD_Symbol_255)
          OpenAD_Symbol_913 = (OpenAD_Symbol_254 * OpenAD_Symbol_252)
          OpenAD_Symbol_915 = (OpenAD_Symbol_912 * OpenAD_Symbol_252)
          OpenAD_Symbol_917 = OpenAD_Symbol_251
          CALL setderiv(OpenAD_Symbol_918,ETAMASK(IX,IY))
          CALL setderiv(OpenAD_Symbol_916,ERROR)
          CALL setderiv(OpenAD_Symbol_914,WF_LAPLDEPTH)
          CALL sax(OpenAD_Symbol_913,OpenAD_Symbol_914,WEIGHT_LAPLDEPTH(
     +IX,IY))
          CALL saxpy(OpenAD_Symbol_915,OpenAD_Symbol_916,WEIGHT_LAPLDEPT
     +H(IX,IY))
          CALL saxpy(OpenAD_Symbol_917,OpenAD_Symbol_918,WEIGHT_LAPLDEPT
     +H(IX,IY))
        END DO
      END DO
      RETURN
      END SUBROUTINE

      SUBROUTINE make_weights_graddepth()
      use w2f__types
      use active_module
      use size
      use pfields
      use weights
      IMPLICIT NONE
C
C     **** Global Variables ****
C
      REAL(w2f__8) OpenAD_Symbol_262
      REAL(w2f__8) OpenAD_Symbol_263
      REAL(w2f__8) OpenAD_Symbol_264
      REAL(w2f__8) OpenAD_Symbol_265
      REAL(w2f__8) OpenAD_Symbol_266
      REAL(w2f__8) OpenAD_Symbol_267
      REAL(w2f__8) OpenAD_Symbol_272
      REAL(w2f__8) OpenAD_Symbol_268
      REAL(w2f__8) OpenAD_Symbol_273
      REAL(w2f__8) OpenAD_Symbol_269
      REAL(w2f__8) OpenAD_Symbol_920
      REAL(w2f__8) OpenAD_Symbol_921
      type(active) :: OpenAD_Symbol_922
      REAL(w2f__8) OpenAD_Symbol_923
      REAL(w2f__8) OpenAD_Symbol_919
      type(active) :: OpenAD_Symbol_924
      REAL(w2f__8) OpenAD_Symbol_925
      type(active) :: OpenAD_Symbol_926
C
C     **** Local Variables and functions ****
C
      type(active) :: ERROR
      INTEGER(w2f__i4) IX
      INTEGER(w2f__i4) IY
C
C     **** statements ****
C
      ERROR%v = 1.0D00
      CALL zero_deriv(ERROR)
      DO IY = 1, 20, 1
        DO IX = 1, 20, 1
          OpenAD_Symbol_268 = (1.0D00/ERROR%v)
          OpenAD_Symbol_265 = (OpenAD_Symbol_268 ** INT(2_w2f__i8))
          OpenAD_Symbol_262 = (WF_GRADDEPTH%v*OpenAD_Symbol_265)
          OpenAD_Symbol_273 = (ETAMASK(IX,IY)%v*OpenAD_Symbol_262)
          OpenAD_Symbol_263 = OpenAD_Symbol_262
          OpenAD_Symbol_266 = OpenAD_Symbol_265
          OpenAD_Symbol_272 = (-(1.0D00/(ERROR%v*ERROR%v)))
          OpenAD_Symbol_269 = (INT(2_w2f__i8) *(OpenAD_Symbol_268 **(
     > INT(2_w2f__i8) - INT(1_w2f__i8))))
          OpenAD_Symbol_267 = WF_GRADDEPTH%v
          OpenAD_Symbol_264 = ETAMASK(IX,IY)%v
          WEIGHT_GRADDEPTH(INT(IX),INT(IY))%v = OpenAD_Symbol_273
          OpenAD_Symbol_919 = (OpenAD_Symbol_272 * OpenAD_Symbol_269)
          OpenAD_Symbol_920 = (OpenAD_Symbol_919 * OpenAD_Symbol_267)
          OpenAD_Symbol_921 = (OpenAD_Symbol_266 * OpenAD_Symbol_264)
          OpenAD_Symbol_923 = (OpenAD_Symbol_920 * OpenAD_Symbol_264)
          OpenAD_Symbol_925 = OpenAD_Symbol_263
          CALL setderiv(OpenAD_Symbol_926,ETAMASK(IX,IY))
          CALL setderiv(OpenAD_Symbol_924,ERROR)
          CALL setderiv(OpenAD_Symbol_922,WF_GRADDEPTH)
          CALL sax(OpenAD_Symbol_921,OpenAD_Symbol_922,WEIGHT_GRADDEPTH(
     +IX,IY))
          CALL saxpy(OpenAD_Symbol_923,OpenAD_Symbol_924,WEIGHT_GRADDEPT
     +H(IX,IY))
          CALL saxpy(OpenAD_Symbol_925,OpenAD_Symbol_926,WEIGHT_GRADDEPT
     +H(IX,IY))
        END DO
      END DO
      RETURN
      END SUBROUTINE

      SUBROUTINE map_from_control_vector(N, XC)
      use w2f__types
      use active_module
      use size
      use pfields
      IMPLICIT NONE
C
C     **** Global Variables ****
C
      REAL(w2f__8) OpenAD_Symbol_173
      REAL(w2f__8) OpenAD_Symbol_174
      REAL(w2f__8) OpenAD_Symbol_175
      REAL(w2f__8) OpenAD_Symbol_176
      REAL(w2f__8) OpenAD_Symbol_178
      REAL(w2f__8) OpenAD_Symbol_855
      type(active) :: OpenAD_Symbol_856
      REAL(w2f__8) OpenAD_Symbol_857
      type(active) :: OpenAD_Symbol_858
C
C     **** Parameters and Result ****
C
      INTEGER(w2f__i4) N
      type(active) :: XC(1 : N)
C
C     **** Local Variables and functions ****
C
      INTEGER(w2f__i8) t__101
      INTEGER(w2f__i8) t__102
      INTEGER(w2f__i4) IX
      INTEGER(w2f__i4) IY
      INTEGER(w2f__i4) K
      REAL(w2f__4) ONE
      PARAMETER ( ONE =     1.000000)
C
C     **** statements ****
C
      t__101 = N
      t__102 = MAX(t__101, 0_w2f__i8)
      K = 0
      DO IY = 1, 20, 1
        DO IX = 1, 20, 1
          IF (ETAMASK(IX,IY)%v .ne. 0.0D00) THEN
            K = K + 1
            OpenAD_Symbol_173 = (XC(K)%v+1.0D00)
            OpenAD_Symbol_178 = (SCALEDEPTH(IX,IY)%v*OpenAD_Symbol_173)
            OpenAD_Symbol_174 = OpenAD_Symbol_173
            OpenAD_Symbol_176 = 1_w2f__i8
            OpenAD_Symbol_175 = SCALEDEPTH(IX,IY)%v
            DEPTH(INT(IX),INT(IY))%v = OpenAD_Symbol_178
            OpenAD_Symbol_855 = (OpenAD_Symbol_176 * OpenAD_Symbol_175)
            OpenAD_Symbol_857 = OpenAD_Symbol_174
            CALL setderiv(OpenAD_Symbol_858,SCALEDEPTH(IX,IY))
            CALL setderiv(OpenAD_Symbol_856,XC(K))
            CALL sax(OpenAD_Symbol_855,OpenAD_Symbol_856,DEPTH(IX,IY))
            CALL saxpy(OpenAD_Symbol_857,OpenAD_Symbol_858,DEPTH(IX,IY))
          ENDIF
        END DO
      END DO
      IF(N .ne. K) THEN
        WRITE(*, *) 'map_from_control_vector: ',
     >  'dimensions of control vector are wrong'
        WRITE(*, *) K, ' should be ', N
      ENDIF
      RETURN
      END SUBROUTINE

      SUBROUTINE map_to_control_vector(N, XC)
      use w2f__types
      use active_module
      use size
      use pfields
      IMPLICIT NONE
C
C     **** Global Variables ****
C
      REAL(w2f__8) OpenAD_Symbol_280
      REAL(w2f__8) OpenAD_Symbol_282
      REAL(w2f__8) OpenAD_Symbol_283
      REAL(w2f__8) OpenAD_Symbol_284
      REAL(w2f__8) OpenAD_Symbol_935
      type(active) :: OpenAD_Symbol_936
      REAL(w2f__8) OpenAD_Symbol_937
      type(active) :: OpenAD_Symbol_938
C
C     **** Parameters and Result ****
C
      INTEGER(w2f__i4) N
      type(active) :: XC(1 : N)
C
C     **** Local Variables and functions ****
C
      INTEGER(w2f__i8) t__103
      INTEGER(w2f__i8) t__104
      INTEGER(w2f__i4) IX
      INTEGER(w2f__i4) IY
      INTEGER(w2f__i4) K
      REAL(w2f__4) ONE
      PARAMETER ( ONE =     1.000000)
C
C     **** statements ****
C
      t__103 = N
      t__104 = MAX(t__103, 0_w2f__i8)
      K = 0
      DO IY = 1, 20, 1
        DO IX = 1, 20, 1
          IF (ETAMASK(IX,IY)%v .ne. 0.0D00) THEN
            K = K + 1
            OpenAD_Symbol_284 = ((DEPTH(IX,IY)%v/SCALEDEPTH(IX,IY)%v)+(-
     +1.0D00))
            OpenAD_Symbol_282 = (INT(1 _w2f__i8)/SCALEDEPTH(IX,IY)%v)
            OpenAD_Symbol_283 = (-(DEPTH(IX,IY)%v/(SCALEDEPTH(IX,IY)%v*S
     +CALEDEPTH(IX,IY)%v)))
            OpenAD_Symbol_280 = 1_w2f__i8
            XC(INT(K))%v = OpenAD_Symbol_284
            OpenAD_Symbol_935 = (OpenAD_Symbol_282 * OpenAD_Symbol_280)
            OpenAD_Symbol_937 = (OpenAD_Symbol_283 * OpenAD_Symbol_280)
            CALL setderiv(OpenAD_Symbol_938,SCALEDEPTH(IX,IY))
            CALL setderiv(OpenAD_Symbol_936,DEPTH(IX,IY))
            CALL sax(OpenAD_Symbol_935,OpenAD_Symbol_936,XC(K))
            CALL saxpy(OpenAD_Symbol_937,OpenAD_Symbol_938,XC(K))
          ENDIF
        END DO
      END DO
      IF(N .ne. K) THEN
        WRITE(*, *) 'map_to_control_vector: ',
     >  'dimensions of control vector are wrong'
        WRITE(*, *) K, ' should be ', N
      ENDIF
      RETURN
      END SUBROUTINE

      SUBROUTINE map_gradient(N, ADXC, GRAD)
      use w2f__types
      use active_module
      use size
      use pfields
      IMPLICIT NONE
C
C     **** Global Variables ****
C
      REAL(w2f__8) OpenAD_Symbol_170
      REAL(w2f__8) OpenAD_Symbol_171
      REAL(w2f__8) OpenAD_Symbol_172
      REAL(w2f__8) OpenAD_Symbol_851
      type(active) :: OpenAD_Symbol_852
      REAL(w2f__8) OpenAD_Symbol_853
      type(active) :: OpenAD_Symbol_854
C
C     **** Parameters and Result ****
C
      INTEGER(w2f__i4) N
      type(active) :: ADXC(1 : N)
      type(active) :: GRAD(1 : 20, 1 : 20)
C
C     **** Local Variables and functions ****
C
      INTEGER(w2f__i8) t__105
      INTEGER(w2f__i8) t__108
      INTEGER(w2f__i4) IX
      INTEGER(w2f__i4) IY
      INTEGER(w2f__i4) K
C
C     **** statements ****
C
      t__105 = N
      t__108 = MAX(t__105, 0_w2f__i8)
      K = 0
      DO IY = 1, 20, 1
        DO IX = 1, 20, 1
          IF (ETAMASK(IX,IY)%v .ne. 0.0D00) THEN
            K = K + 1
            OpenAD_Symbol_172 = (ADXC(K)%v/SCALEDEPTH(IX,IY)%v)
            OpenAD_Symbol_170 = (INT(1 _w2f__i8)/SCALEDEPTH(IX,IY)%v)
            OpenAD_Symbol_171 = (-(ADXC(K)%v/(SCALEDEPTH(IX,IY)%v*SCALED
     +EPTH(IX,IY)%v)))
            GRAD(INT(IX),INT(IY))%v = OpenAD_Symbol_172
            OpenAD_Symbol_851 = OpenAD_Symbol_170
            OpenAD_Symbol_853 = OpenAD_Symbol_171
            CALL setderiv(OpenAD_Symbol_854,SCALEDEPTH(IX,IY))
            CALL setderiv(OpenAD_Symbol_852,ADXC(K))
            CALL sax(OpenAD_Symbol_851,OpenAD_Symbol_852,GRAD(IX,IY))
            CALL saxpy(OpenAD_Symbol_853,OpenAD_Symbol_854,GRAD(IX,IY))
          ENDIF
        END DO
      END DO
      IF(N .ne. K) THEN
        WRITE(*, *) 'map_from_control_vector: ',
     >  'dimensions of control vector are wrong'
        WRITE(*, *) K, ' should be ', N
      ENDIF
      RETURN
      END SUBROUTINE

      SUBROUTINE length_of_control_vector(N)
      use w2f__types
      use active_module
      use size
      use pfields
      IMPLICIT NONE
C
C     **** Parameters and Result ****
C
      INTEGER(w2f__i4) N
C
C     **** Local Variables and functions ****
C
      INTEGER(w2f__i4) IX
      INTEGER(w2f__i4) IY
      INTEGER(w2f__i4) K
C
C     **** statements ****
C
      K = 0
      DO IY = 1, 20, 1
        DO IX = 1, 20, 1
          IF (ETAMASK(IX,IY)%v .ne. 0.0D00) THEN
            K = K + 1
          ENDIF
        END DO
      END DO
      N = K
      WRITE(*, *) 'dimensions of control vector = ', N
      RETURN
      END SUBROUTINE

      SUBROUTINE forward_model(NCTRL, XC, COST_FINAL)
      use w2f__types
      use active_module
      use size
      use parms
      use vars
      use pfields
      use weights
      use data
      use force
      IMPLICIT NONE
C
C     **** Global Variables ****
C
      REAL(w2f__8) OpenAD_Symbol_301
      REAL(w2f__8) OpenAD_Symbol_302
      REAL(w2f__8) OpenAD_Symbol_303
      REAL(w2f__8) OpenAD_Symbol_304
      REAL(w2f__8) OpenAD_Symbol_305
      REAL(w2f__8) OpenAD_Symbol_310
      REAL(w2f__8) OpenAD_Symbol_306
      REAL(w2f__8) OpenAD_Symbol_311
      REAL(w2f__8) OpenAD_Symbol_307
      REAL(w2f__8) OpenAD_Symbol_312
      REAL(w2f__8) OpenAD_Symbol_308
      REAL(w2f__8) OpenAD_Symbol_313
      REAL(w2f__8) OpenAD_Symbol_309
      REAL(w2f__8) OpenAD_Symbol_314
      REAL(w2f__8) OpenAD_Symbol_315
      REAL(w2f__8) OpenAD_Symbol_320
      REAL(w2f__8) OpenAD_Symbol_316
      REAL(w2f__8) OpenAD_Symbol_321
      REAL(w2f__8) OpenAD_Symbol_317
      REAL(w2f__8) OpenAD_Symbol_322
      REAL(w2f__8) OpenAD_Symbol_318
      REAL(w2f__8) OpenAD_Symbol_319
      REAL(w2f__8) OpenAD_Symbol_324
      REAL(w2f__8) OpenAD_Symbol_325
      REAL(w2f__8) OpenAD_Symbol_330
      REAL(w2f__8) OpenAD_Symbol_326
      REAL(w2f__8) OpenAD_Symbol_327
      REAL(w2f__8) OpenAD_Symbol_332
      REAL(w2f__8) OpenAD_Symbol_328
      REAL(w2f__8) OpenAD_Symbol_333
      REAL(w2f__8) OpenAD_Symbol_329
      REAL(w2f__8) OpenAD_Symbol_334
      REAL(w2f__8) OpenAD_Symbol_285
      REAL(w2f__8) OpenAD_Symbol_290
      REAL(w2f__8) OpenAD_Symbol_335
      REAL(w2f__8) OpenAD_Symbol_340
      REAL(w2f__8) OpenAD_Symbol_286
      REAL(w2f__8) OpenAD_Symbol_291
      REAL(w2f__8) OpenAD_Symbol_341
      REAL(w2f__8) OpenAD_Symbol_287
      REAL(w2f__8) OpenAD_Symbol_292
      REAL(w2f__8) OpenAD_Symbol_337
      REAL(w2f__8) OpenAD_Symbol_342
      REAL(w2f__8) OpenAD_Symbol_288
      REAL(w2f__8) OpenAD_Symbol_293
      REAL(w2f__8) OpenAD_Symbol_338
      REAL(w2f__8) OpenAD_Symbol_343
      REAL(w2f__8) OpenAD_Symbol_294
      REAL(w2f__8) OpenAD_Symbol_339
      REAL(w2f__8) OpenAD_Symbol_295
      REAL(w2f__8) OpenAD_Symbol_345
      REAL(w2f__8) OpenAD_Symbol_350
      REAL(w2f__8) OpenAD_Symbol_400
      REAL(w2f__8) OpenAD_Symbol_296
      REAL(w2f__8) OpenAD_Symbol_346
      REAL(w2f__8) OpenAD_Symbol_351
      REAL(w2f__8) OpenAD_Symbol_401
      REAL(w2f__8) OpenAD_Symbol_347
      REAL(w2f__8) OpenAD_Symbol_352
      REAL(w2f__8) OpenAD_Symbol_402
      REAL(w2f__8) OpenAD_Symbol_298
      REAL(w2f__8) OpenAD_Symbol_348
      REAL(w2f__8) OpenAD_Symbol_353
      REAL(w2f__8) OpenAD_Symbol_403
      REAL(w2f__8) OpenAD_Symbol_299
      REAL(w2f__8) OpenAD_Symbol_349
      REAL(w2f__8) OpenAD_Symbol_354
      REAL(w2f__8) OpenAD_Symbol_355
      REAL(w2f__8) OpenAD_Symbol_360
      REAL(w2f__8) OpenAD_Symbol_405
      REAL(w2f__8) OpenAD_Symbol_410
      REAL(w2f__8) OpenAD_Symbol_356
      REAL(w2f__8) OpenAD_Symbol_361
      REAL(w2f__8) OpenAD_Symbol_406
      REAL(w2f__8) OpenAD_Symbol_411
      REAL(w2f__8) OpenAD_Symbol_357
      REAL(w2f__8) OpenAD_Symbol_362
      REAL(w2f__8) OpenAD_Symbol_407
      REAL(w2f__8) OpenAD_Symbol_412
      REAL(w2f__8) OpenAD_Symbol_358
      REAL(w2f__8) OpenAD_Symbol_363
      REAL(w2f__8) OpenAD_Symbol_408
      REAL(w2f__8) OpenAD_Symbol_413
      REAL(w2f__8) OpenAD_Symbol_364
      REAL(w2f__8) OpenAD_Symbol_414
      REAL(w2f__8) OpenAD_Symbol_365
      REAL(w2f__8) OpenAD_Symbol_370
      REAL(w2f__8) OpenAD_Symbol_415
      REAL(w2f__8) OpenAD_Symbol_420
      REAL(w2f__8) OpenAD_Symbol_366
      REAL(w2f__8) OpenAD_Symbol_371
      REAL(w2f__8) OpenAD_Symbol_416
      REAL(w2f__8) OpenAD_Symbol_367
      REAL(w2f__8) OpenAD_Symbol_372
      REAL(w2f__8) OpenAD_Symbol_417
      REAL(w2f__8) OpenAD_Symbol_422
      REAL(w2f__8) OpenAD_Symbol_368
      REAL(w2f__8) OpenAD_Symbol_373
      REAL(w2f__8) OpenAD_Symbol_418
      REAL(w2f__8) OpenAD_Symbol_423
      REAL(w2f__8) OpenAD_Symbol_369
      REAL(w2f__8) OpenAD_Symbol_374
      REAL(w2f__8) OpenAD_Symbol_419
      REAL(w2f__8) OpenAD_Symbol_424
      REAL(w2f__8) OpenAD_Symbol_375
      REAL(w2f__8) OpenAD_Symbol_380
      REAL(w2f__8) OpenAD_Symbol_425
      REAL(w2f__8) OpenAD_Symbol_430
      REAL(w2f__8) OpenAD_Symbol_376
      REAL(w2f__8) OpenAD_Symbol_426
      REAL(w2f__8) OpenAD_Symbol_431
      REAL(w2f__8) OpenAD_Symbol_377
      REAL(w2f__8) OpenAD_Symbol_382
      REAL(w2f__8) OpenAD_Symbol_427
      REAL(w2f__8) OpenAD_Symbol_432
      REAL(w2f__8) OpenAD_Symbol_378
      REAL(w2f__8) OpenAD_Symbol_383
      REAL(w2f__8) OpenAD_Symbol_428
      REAL(w2f__8) OpenAD_Symbol_433
      REAL(w2f__8) OpenAD_Symbol_379
      REAL(w2f__8) OpenAD_Symbol_384
      REAL(w2f__8) OpenAD_Symbol_429
      REAL(w2f__8) OpenAD_Symbol_434
      REAL(w2f__8) OpenAD_Symbol_385
      REAL(w2f__8) OpenAD_Symbol_390
      REAL(w2f__8) OpenAD_Symbol_435
      REAL(w2f__8) OpenAD_Symbol_440
      REAL(w2f__8) OpenAD_Symbol_391
      REAL(w2f__8) OpenAD_Symbol_441
      REAL(w2f__8) OpenAD_Symbol_387
      REAL(w2f__8) OpenAD_Symbol_392
      REAL(w2f__8) OpenAD_Symbol_437
      REAL(w2f__8) OpenAD_Symbol_442
      REAL(w2f__8) OpenAD_Symbol_388
      REAL(w2f__8) OpenAD_Symbol_393
      REAL(w2f__8) OpenAD_Symbol_438
      REAL(w2f__8) OpenAD_Symbol_443
      REAL(w2f__8) OpenAD_Symbol_389
      REAL(w2f__8) OpenAD_Symbol_394
      REAL(w2f__8) OpenAD_Symbol_439
      REAL(w2f__8) OpenAD_Symbol_444
      REAL(w2f__8) OpenAD_Symbol_395
      REAL(w2f__8) OpenAD_Symbol_445
      REAL(w2f__8) OpenAD_Symbol_450
      REAL(w2f__8) OpenAD_Symbol_500
      REAL(w2f__8) OpenAD_Symbol_396
      REAL(w2f__8) OpenAD_Symbol_446
      REAL(w2f__8) OpenAD_Symbol_451
      REAL(w2f__8) OpenAD_Symbol_501
      REAL(w2f__8) OpenAD_Symbol_397
      REAL(w2f__8) OpenAD_Symbol_447
      REAL(w2f__8) OpenAD_Symbol_452
      REAL(w2f__8) OpenAD_Symbol_502
      REAL(w2f__8) OpenAD_Symbol_448
      REAL(w2f__8) OpenAD_Symbol_453
      REAL(w2f__8) OpenAD_Symbol_503
      REAL(w2f__8) OpenAD_Symbol_399
      REAL(w2f__8) OpenAD_Symbol_449
      REAL(w2f__8) OpenAD_Symbol_454
      REAL(w2f__8) OpenAD_Symbol_504
      REAL(w2f__8) OpenAD_Symbol_455
      REAL(w2f__8) OpenAD_Symbol_460
      REAL(w2f__8) OpenAD_Symbol_505
      REAL(w2f__8) OpenAD_Symbol_510
      REAL(w2f__8) OpenAD_Symbol_456
      REAL(w2f__8) OpenAD_Symbol_461
      REAL(w2f__8) OpenAD_Symbol_506
      REAL(w2f__8) OpenAD_Symbol_511
      REAL(w2f__8) OpenAD_Symbol_457
      REAL(w2f__8) OpenAD_Symbol_462
      REAL(w2f__8) OpenAD_Symbol_507
      REAL(w2f__8) OpenAD_Symbol_512
      REAL(w2f__8) OpenAD_Symbol_508
      REAL(w2f__8) OpenAD_Symbol_513
      REAL(w2f__8) OpenAD_Symbol_459
      REAL(w2f__8) OpenAD_Symbol_464
      REAL(w2f__8) OpenAD_Symbol_509
      REAL(w2f__8) OpenAD_Symbol_514
      REAL(w2f__8) OpenAD_Symbol_465
      REAL(w2f__8) OpenAD_Symbol_470
      REAL(w2f__8) OpenAD_Symbol_515
      REAL(w2f__8) OpenAD_Symbol_520
      REAL(w2f__8) OpenAD_Symbol_466
      REAL(w2f__8) OpenAD_Symbol_471
      REAL(w2f__8) OpenAD_Symbol_516
      REAL(w2f__8) OpenAD_Symbol_521
      REAL(w2f__8) OpenAD_Symbol_467
      REAL(w2f__8) OpenAD_Symbol_472
      REAL(w2f__8) OpenAD_Symbol_517
      REAL(w2f__8) OpenAD_Symbol_522
      REAL(w2f__8) OpenAD_Symbol_468
      REAL(w2f__8) OpenAD_Symbol_473
      REAL(w2f__8) OpenAD_Symbol_518
      REAL(w2f__8) OpenAD_Symbol_523
      REAL(w2f__8) OpenAD_Symbol_469
      REAL(w2f__8) OpenAD_Symbol_474
      REAL(w2f__8) OpenAD_Symbol_519
      REAL(w2f__8) OpenAD_Symbol_524
      REAL(w2f__8) OpenAD_Symbol_475
      REAL(w2f__8) OpenAD_Symbol_480
      REAL(w2f__8) OpenAD_Symbol_525
      REAL(w2f__8) OpenAD_Symbol_530
      REAL(w2f__8) OpenAD_Symbol_476
      REAL(w2f__8) OpenAD_Symbol_481
      REAL(w2f__8) OpenAD_Symbol_526
      REAL(w2f__8) OpenAD_Symbol_531
      REAL(w2f__8) OpenAD_Symbol_477
      REAL(w2f__8) OpenAD_Symbol_482
      REAL(w2f__8) OpenAD_Symbol_527
      REAL(w2f__8) OpenAD_Symbol_532
      REAL(w2f__8) OpenAD_Symbol_483
      REAL(w2f__8) OpenAD_Symbol_528
      REAL(w2f__8) OpenAD_Symbol_533
      REAL(w2f__8) OpenAD_Symbol_479
      REAL(w2f__8) OpenAD_Symbol_529
      REAL(w2f__8) OpenAD_Symbol_534
      REAL(w2f__8) OpenAD_Symbol_485
      REAL(w2f__8) OpenAD_Symbol_490
      REAL(w2f__8) OpenAD_Symbol_535
      REAL(w2f__8) OpenAD_Symbol_540
      REAL(w2f__8) OpenAD_Symbol_486
      REAL(w2f__8) OpenAD_Symbol_491
      REAL(w2f__8) OpenAD_Symbol_536
      REAL(w2f__8) OpenAD_Symbol_541
      REAL(w2f__8) OpenAD_Symbol_487
      REAL(w2f__8) OpenAD_Symbol_492
      REAL(w2f__8) OpenAD_Symbol_537
      REAL(w2f__8) OpenAD_Symbol_542
      REAL(w2f__8) OpenAD_Symbol_488
      REAL(w2f__8) OpenAD_Symbol_493
      REAL(w2f__8) OpenAD_Symbol_538
      REAL(w2f__8) OpenAD_Symbol_543
      REAL(w2f__8) OpenAD_Symbol_494
      REAL(w2f__8) OpenAD_Symbol_539
      REAL(w2f__8) OpenAD_Symbol_544
      REAL(w2f__8) OpenAD_Symbol_495
      REAL(w2f__8) OpenAD_Symbol_545
      REAL(w2f__8) OpenAD_Symbol_550
      REAL(w2f__8) OpenAD_Symbol_600
      REAL(w2f__8) OpenAD_Symbol_496
      REAL(w2f__8) OpenAD_Symbol_546
      REAL(w2f__8) OpenAD_Symbol_551
      REAL(w2f__8) OpenAD_Symbol_601
      REAL(w2f__8) OpenAD_Symbol_497
      REAL(w2f__8) OpenAD_Symbol_547
      REAL(w2f__8) OpenAD_Symbol_602
      REAL(w2f__8) OpenAD_Symbol_498
      REAL(w2f__8) OpenAD_Symbol_548
      REAL(w2f__8) OpenAD_Symbol_553
      REAL(w2f__8) OpenAD_Symbol_499
      REAL(w2f__8) OpenAD_Symbol_554
      REAL(w2f__8) OpenAD_Symbol_604
      REAL(w2f__8) OpenAD_Symbol_555
      REAL(w2f__8) OpenAD_Symbol_560
      REAL(w2f__8) OpenAD_Symbol_605
      REAL(w2f__8) OpenAD_Symbol_610
      REAL(w2f__8) OpenAD_Symbol_556
      REAL(w2f__8) OpenAD_Symbol_606
      REAL(w2f__8) OpenAD_Symbol_611
      REAL(w2f__8) OpenAD_Symbol_557
      REAL(w2f__8) OpenAD_Symbol_562
      REAL(w2f__8) OpenAD_Symbol_607
      REAL(w2f__8) OpenAD_Symbol_612
      REAL(w2f__8) OpenAD_Symbol_558
      REAL(w2f__8) OpenAD_Symbol_563
      REAL(w2f__8) OpenAD_Symbol_608
      REAL(w2f__8) OpenAD_Symbol_613
      REAL(w2f__8) OpenAD_Symbol_559
      REAL(w2f__8) OpenAD_Symbol_564
      REAL(w2f__8) OpenAD_Symbol_609
      REAL(w2f__8) OpenAD_Symbol_614
      REAL(w2f__8) OpenAD_Symbol_565
      REAL(w2f__8) OpenAD_Symbol_570
      REAL(w2f__8) OpenAD_Symbol_615
      REAL(w2f__8) OpenAD_Symbol_620
      REAL(w2f__8) OpenAD_Symbol_566
      REAL(w2f__8) OpenAD_Symbol_571
      REAL(w2f__8) OpenAD_Symbol_616
      REAL(w2f__8) OpenAD_Symbol_621
      REAL(w2f__8) OpenAD_Symbol_567
      REAL(w2f__8) OpenAD_Symbol_572
      REAL(w2f__8) OpenAD_Symbol_617
      REAL(w2f__8) OpenAD_Symbol_622
      REAL(w2f__8) OpenAD_Symbol_568
      REAL(w2f__8) OpenAD_Symbol_573
      REAL(w2f__8) OpenAD_Symbol_623
      REAL(w2f__8) OpenAD_Symbol_569
      REAL(w2f__8) OpenAD_Symbol_574
      REAL(w2f__8) OpenAD_Symbol_619
      REAL(w2f__8) OpenAD_Symbol_575
      REAL(w2f__8) OpenAD_Symbol_580
      REAL(w2f__8) OpenAD_Symbol_625
      REAL(w2f__8) OpenAD_Symbol_630
      REAL(w2f__8) OpenAD_Symbol_581
      REAL(w2f__8) OpenAD_Symbol_626
      REAL(w2f__8) OpenAD_Symbol_631
      REAL(w2f__8) OpenAD_Symbol_577
      REAL(w2f__8) OpenAD_Symbol_582
      REAL(w2f__8) OpenAD_Symbol_627
      REAL(w2f__8) OpenAD_Symbol_632
      REAL(w2f__8) OpenAD_Symbol_578
      REAL(w2f__8) OpenAD_Symbol_583
      REAL(w2f__8) OpenAD_Symbol_628
      REAL(w2f__8) OpenAD_Symbol_633
      REAL(w2f__8) OpenAD_Symbol_579
      REAL(w2f__8) OpenAD_Symbol_584
      REAL(w2f__8) OpenAD_Symbol_634
      REAL(w2f__8) OpenAD_Symbol_585
      REAL(w2f__8) OpenAD_Symbol_590
      REAL(w2f__8) OpenAD_Symbol_635
      REAL(w2f__8) OpenAD_Symbol_640
      REAL(w2f__8) OpenAD_Symbol_586
      REAL(w2f__8) OpenAD_Symbol_591
      REAL(w2f__8) OpenAD_Symbol_636
      REAL(w2f__8) OpenAD_Symbol_641
      REAL(w2f__8) OpenAD_Symbol_587
      REAL(w2f__8) OpenAD_Symbol_592
      REAL(w2f__8) OpenAD_Symbol_637
      REAL(w2f__8) OpenAD_Symbol_642
      REAL(w2f__8) OpenAD_Symbol_588
      REAL(w2f__8) OpenAD_Symbol_593
      REAL(w2f__8) OpenAD_Symbol_643
      REAL(w2f__8) OpenAD_Symbol_589
      REAL(w2f__8) OpenAD_Symbol_594
      REAL(w2f__8) OpenAD_Symbol_639
      REAL(w2f__8) OpenAD_Symbol_644
      REAL(w2f__8) OpenAD_Symbol_595
      REAL(w2f__8) OpenAD_Symbol_645
      REAL(w2f__8) OpenAD_Symbol_650
      REAL(w2f__8) OpenAD_Symbol_700
      REAL(w2f__8) OpenAD_Symbol_596
      REAL(w2f__8) OpenAD_Symbol_646
      REAL(w2f__8) OpenAD_Symbol_651
      REAL(w2f__8) OpenAD_Symbol_701
      REAL(w2f__8) OpenAD_Symbol_597
      REAL(w2f__8) OpenAD_Symbol_647
      REAL(w2f__8) OpenAD_Symbol_652
      REAL(w2f__8) OpenAD_Symbol_702
      REAL(w2f__8) OpenAD_Symbol_648
      REAL(w2f__8) OpenAD_Symbol_599
      REAL(w2f__8) OpenAD_Symbol_649
      REAL(w2f__8) OpenAD_Symbol_654
      REAL(w2f__8) OpenAD_Symbol_704
      REAL(w2f__8) OpenAD_Symbol_655
      REAL(w2f__8) OpenAD_Symbol_660
      REAL(w2f__8) OpenAD_Symbol_705
      REAL(w2f__8) OpenAD_Symbol_710
      REAL(w2f__8) OpenAD_Symbol_656
      REAL(w2f__8) OpenAD_Symbol_661
      REAL(w2f__8) OpenAD_Symbol_706
      REAL(w2f__8) OpenAD_Symbol_711
      REAL(w2f__8) OpenAD_Symbol_657
      REAL(w2f__8) OpenAD_Symbol_662
      REAL(w2f__8) OpenAD_Symbol_707
      REAL(w2f__8) OpenAD_Symbol_712
      REAL(w2f__8) OpenAD_Symbol_658
      REAL(w2f__8) OpenAD_Symbol_663
      REAL(w2f__8) OpenAD_Symbol_708
      REAL(w2f__8) OpenAD_Symbol_713
      REAL(w2f__8) OpenAD_Symbol_659
      REAL(w2f__8) OpenAD_Symbol_664
      REAL(w2f__8) OpenAD_Symbol_709
      REAL(w2f__8) OpenAD_Symbol_714
      REAL(w2f__8) OpenAD_Symbol_665
      REAL(w2f__8) OpenAD_Symbol_670
      REAL(w2f__8) OpenAD_Symbol_715
      REAL(w2f__8) OpenAD_Symbol_666
      REAL(w2f__8) OpenAD_Symbol_671
      REAL(w2f__8) OpenAD_Symbol_716
      REAL(w2f__8) OpenAD_Symbol_667
      REAL(w2f__8) OpenAD_Symbol_672
      REAL(w2f__8) OpenAD_Symbol_717
      REAL(w2f__8) OpenAD_Symbol_668
      REAL(w2f__8) OpenAD_Symbol_673
      REAL(w2f__8) OpenAD_Symbol_669
      REAL(w2f__8) OpenAD_Symbol_674
      REAL(w2f__8) OpenAD_Symbol_676
      REAL(w2f__8) OpenAD_Symbol_681
      REAL(w2f__8) OpenAD_Symbol_677
      REAL(w2f__8) OpenAD_Symbol_682
      REAL(w2f__8) OpenAD_Symbol_678
      REAL(w2f__8) OpenAD_Symbol_683
      REAL(w2f__8) OpenAD_Symbol_679
      REAL(w2f__8) OpenAD_Symbol_684
      REAL(w2f__8) OpenAD_Symbol_685
      REAL(w2f__8) OpenAD_Symbol_690
      REAL(w2f__8) OpenAD_Symbol_686
      REAL(w2f__8) OpenAD_Symbol_691
      REAL(w2f__8) OpenAD_Symbol_687
      REAL(w2f__8) OpenAD_Symbol_688
      REAL(w2f__8) OpenAD_Symbol_693
      REAL(w2f__8) OpenAD_Symbol_689
      REAL(w2f__8) OpenAD_Symbol_694
      REAL(w2f__8) OpenAD_Symbol_695
      REAL(w2f__8) OpenAD_Symbol_696
      REAL(w2f__8) OpenAD_Symbol_697
      REAL(w2f__8) OpenAD_Symbol_699
      type(active) :: OpenAD_Symbol_940
      REAL(w2f__8) OpenAD_Symbol_941
      type(active) :: OpenAD_Symbol_942
      REAL(w2f__8) OpenAD_Symbol_943
      REAL(w2f__8) OpenAD_Symbol_939
      type(active) :: OpenAD_Symbol_944
      REAL(w2f__8) OpenAD_Symbol_945
      type(active) :: OpenAD_Symbol_950
      type(active) :: OpenAD_Symbol_946
      REAL(w2f__8) OpenAD_Symbol_951
      REAL(w2f__8) OpenAD_Symbol_947
      type(active) :: OpenAD_Symbol_952
      type(active) :: OpenAD_Symbol_948
      REAL(w2f__8) OpenAD_Symbol_953
      REAL(w2f__8) OpenAD_Symbol_949
      type(active) :: OpenAD_Symbol_954
      REAL(w2f__8) OpenAD_Symbol_955
      type(active) :: OpenAD_Symbol_960
      type(active) :: OpenAD_Symbol_956
      REAL(w2f__8) OpenAD_Symbol_961
      REAL(w2f__8) OpenAD_Symbol_957
      type(active) :: OpenAD_Symbol_962
      type(active) :: OpenAD_Symbol_958
      REAL(w2f__8) OpenAD_Symbol_963
      REAL(w2f__8) OpenAD_Symbol_959
      type(active) :: OpenAD_Symbol_964
      REAL(w2f__8) OpenAD_Symbol_965
      type(active) :: OpenAD_Symbol_970
      type(active) :: OpenAD_Symbol_966
      REAL(w2f__8) OpenAD_Symbol_971
      REAL(w2f__8) OpenAD_Symbol_967
      REAL(w2f__8) OpenAD_Symbol_972
      REAL(w2f__8) OpenAD_Symbol_968
      type(active) :: OpenAD_Symbol_973
      REAL(w2f__8) OpenAD_Symbol_969
      REAL(w2f__8) OpenAD_Symbol_974
      type(active) :: OpenAD_Symbol_975
      type(active) :: OpenAD_Symbol_980
      REAL(w2f__8) OpenAD_Symbol_976
      REAL(w2f__8) OpenAD_Symbol_981
      REAL(w2f__8) OpenAD_Symbol_977
      type(active) :: OpenAD_Symbol_982
      type(active) :: OpenAD_Symbol_978
      REAL(w2f__8) OpenAD_Symbol_983
      REAL(w2f__8) OpenAD_Symbol_979
      type(active) :: OpenAD_Symbol_984
      REAL(w2f__8) OpenAD_Symbol_985
      type(active) :: OpenAD_Symbol_990
      type(active) :: OpenAD_Symbol_986
      REAL(w2f__8) OpenAD_Symbol_991
      REAL(w2f__8) OpenAD_Symbol_987
      REAL(w2f__8) OpenAD_Symbol_992
      type(active) :: OpenAD_Symbol_988
      type(active) :: OpenAD_Symbol_993
      REAL(w2f__8) OpenAD_Symbol_989
      REAL(w2f__8) OpenAD_Symbol_994
      type(active) :: OpenAD_Symbol_995
      REAL(w2f__8) OpenAD_Symbol_996
      type(active) :: OpenAD_Symbol_997
      REAL(w2f__8) OpenAD_Symbol_998
      REAL(w2f__8) OpenAD_Symbol_999
      REAL(w2f__8) OpenAD_Symbol_1000
      type(active) :: OpenAD_Symbol_1001
      REAL(w2f__8) OpenAD_Symbol_1002
      type(active) :: OpenAD_Symbol_1003
      REAL(w2f__8) OpenAD_Symbol_1004
      type(active) :: OpenAD_Symbol_1005
      REAL(w2f__8) OpenAD_Symbol_1010
      REAL(w2f__8) OpenAD_Symbol_1006
      type(active) :: OpenAD_Symbol_1011
      type(active) :: OpenAD_Symbol_1007
      REAL(w2f__8) OpenAD_Symbol_1012
      REAL(w2f__8) OpenAD_Symbol_1008
      REAL(w2f__8) OpenAD_Symbol_1013
      type(active) :: OpenAD_Symbol_1009
      type(active) :: OpenAD_Symbol_1014
      REAL(w2f__8) OpenAD_Symbol_1015
      REAL(w2f__8) OpenAD_Symbol_1020
      REAL(w2f__8) OpenAD_Symbol_1016
      type(active) :: OpenAD_Symbol_1021
      type(active) :: OpenAD_Symbol_1017
      REAL(w2f__8) OpenAD_Symbol_1022
      REAL(w2f__8) OpenAD_Symbol_1018
      REAL(w2f__8) OpenAD_Symbol_1023
      type(active) :: OpenAD_Symbol_1019
      REAL(w2f__8) OpenAD_Symbol_1024
      REAL(w2f__8) OpenAD_Symbol_1025
      REAL(w2f__8) OpenAD_Symbol_1030
      REAL(w2f__8) OpenAD_Symbol_1026
      REAL(w2f__8) OpenAD_Symbol_1031
      REAL(w2f__8) OpenAD_Symbol_1027
      type(active) :: OpenAD_Symbol_1032
      REAL(w2f__8) OpenAD_Symbol_1028
      REAL(w2f__8) OpenAD_Symbol_1033
      type(active) :: OpenAD_Symbol_1029
      REAL(w2f__8) OpenAD_Symbol_1034
      type(active) :: OpenAD_Symbol_1035
      REAL(w2f__8) OpenAD_Symbol_1040
      REAL(w2f__8) OpenAD_Symbol_1036
      type(active) :: OpenAD_Symbol_1041
      REAL(w2f__8) OpenAD_Symbol_1037
      REAL(w2f__8) OpenAD_Symbol_1042
      type(active) :: OpenAD_Symbol_1038
      type(active) :: OpenAD_Symbol_1043
      REAL(w2f__8) OpenAD_Symbol_1039
      REAL(w2f__8) OpenAD_Symbol_1044
      type(active) :: OpenAD_Symbol_1045
      REAL(w2f__8) OpenAD_Symbol_1050
      REAL(w2f__8) OpenAD_Symbol_1100
      REAL(w2f__8) OpenAD_Symbol_1046
      REAL(w2f__8) OpenAD_Symbol_1051
      type(active) :: OpenAD_Symbol_1101
      REAL(w2f__8) OpenAD_Symbol_1047
      REAL(w2f__8) OpenAD_Symbol_1052
      REAL(w2f__8) OpenAD_Symbol_1102
      REAL(w2f__8) OpenAD_Symbol_1048
      REAL(w2f__8) OpenAD_Symbol_1053
      REAL(w2f__8) OpenAD_Symbol_1103
      REAL(w2f__8) OpenAD_Symbol_1049
      REAL(w2f__8) OpenAD_Symbol_1054
      type(active) :: OpenAD_Symbol_1104
      type(active) :: OpenAD_Symbol_1055
      REAL(w2f__8) OpenAD_Symbol_1060
      REAL(w2f__8) OpenAD_Symbol_1105
      REAL(w2f__8) OpenAD_Symbol_1110
      REAL(w2f__8) OpenAD_Symbol_1056
      type(active) :: OpenAD_Symbol_1061
      REAL(w2f__8) OpenAD_Symbol_1106
      type(active) :: OpenAD_Symbol_1111
      REAL(w2f__8) OpenAD_Symbol_1057
      REAL(w2f__8) OpenAD_Symbol_1062
      type(active) :: OpenAD_Symbol_1107
      REAL(w2f__8) OpenAD_Symbol_1112
      REAL(w2f__8) OpenAD_Symbol_1058
      type(active) :: OpenAD_Symbol_1063
      REAL(w2f__8) OpenAD_Symbol_1108
      REAL(w2f__8) OpenAD_Symbol_1113
      type(active) :: OpenAD_Symbol_1059
      REAL(w2f__8) OpenAD_Symbol_1064
      type(active) :: OpenAD_Symbol_1109
      REAL(w2f__8) OpenAD_Symbol_1114
      REAL(w2f__8) OpenAD_Symbol_1065
      REAL(w2f__8) OpenAD_Symbol_1070
      REAL(w2f__8) OpenAD_Symbol_1115
      REAL(w2f__8) OpenAD_Symbol_1120
      REAL(w2f__8) OpenAD_Symbol_1066
      type(active) :: OpenAD_Symbol_1071
      REAL(w2f__8) OpenAD_Symbol_1116
      type(active) :: OpenAD_Symbol_1121
      type(active) :: OpenAD_Symbol_1067
      REAL(w2f__8) OpenAD_Symbol_1072
      REAL(w2f__8) OpenAD_Symbol_1117
      REAL(w2f__8) OpenAD_Symbol_1122
      REAL(w2f__8) OpenAD_Symbol_1068
      type(active) :: OpenAD_Symbol_1073
      REAL(w2f__8) OpenAD_Symbol_1118
      REAL(w2f__8) OpenAD_Symbol_1123
      type(active) :: OpenAD_Symbol_1069
      REAL(w2f__8) OpenAD_Symbol_1074
      REAL(w2f__8) OpenAD_Symbol_1119
      REAL(w2f__8) OpenAD_Symbol_1124
      type(active) :: OpenAD_Symbol_1075
      type(active) :: OpenAD_Symbol_1080
      REAL(w2f__8) OpenAD_Symbol_1125
      REAL(w2f__8) OpenAD_Symbol_1130
      REAL(w2f__8) OpenAD_Symbol_1076
      REAL(w2f__8) OpenAD_Symbol_1081
      REAL(w2f__8) OpenAD_Symbol_1126
      REAL(w2f__8) OpenAD_Symbol_1131
      type(active) :: OpenAD_Symbol_1077
      REAL(w2f__8) OpenAD_Symbol_1082
      REAL(w2f__8) OpenAD_Symbol_1127
      REAL(w2f__8) OpenAD_Symbol_1132
      REAL(w2f__8) OpenAD_Symbol_1078
      type(active) :: OpenAD_Symbol_1083
      REAL(w2f__8) OpenAD_Symbol_1128
      REAL(w2f__8) OpenAD_Symbol_1133
      REAL(w2f__8) OpenAD_Symbol_1079
      REAL(w2f__8) OpenAD_Symbol_1084
      REAL(w2f__8) OpenAD_Symbol_1129
      type(active) :: OpenAD_Symbol_1134
      type(active) :: OpenAD_Symbol_1085
      REAL(w2f__8) OpenAD_Symbol_1090
      REAL(w2f__8) OpenAD_Symbol_1135
      REAL(w2f__8) OpenAD_Symbol_1140
      REAL(w2f__8) OpenAD_Symbol_1086
      REAL(w2f__8) OpenAD_Symbol_1091
      REAL(w2f__8) OpenAD_Symbol_1136
      REAL(w2f__8) OpenAD_Symbol_1141
      type(active) :: OpenAD_Symbol_1087
      REAL(w2f__8) OpenAD_Symbol_1092
      type(active) :: OpenAD_Symbol_1137
      type(active) :: OpenAD_Symbol_1142
      REAL(w2f__8) OpenAD_Symbol_1088
      REAL(w2f__8) OpenAD_Symbol_1093
      REAL(w2f__8) OpenAD_Symbol_1138
      REAL(w2f__8) OpenAD_Symbol_1143
      REAL(w2f__8) OpenAD_Symbol_1089
      REAL(w2f__8) OpenAD_Symbol_1094
      REAL(w2f__8) OpenAD_Symbol_1139
      type(active) :: OpenAD_Symbol_1144
      type(active) :: OpenAD_Symbol_1095
      REAL(w2f__8) OpenAD_Symbol_1145
      type(active) :: OpenAD_Symbol_1150
      REAL(w2f__8) OpenAD_Symbol_1200
      REAL(w2f__8) OpenAD_Symbol_1096
      type(active) :: OpenAD_Symbol_1146
      REAL(w2f__8) OpenAD_Symbol_1151
      type(active) :: OpenAD_Symbol_1201
      REAL(w2f__8) OpenAD_Symbol_1097
      REAL(w2f__8) OpenAD_Symbol_1147
      type(active) :: OpenAD_Symbol_1152
      REAL(w2f__8) OpenAD_Symbol_1202
      type(active) :: OpenAD_Symbol_1098
      type(active) :: OpenAD_Symbol_1148
      REAL(w2f__8) OpenAD_Symbol_1153
      type(active) :: OpenAD_Symbol_1203
      REAL(w2f__8) OpenAD_Symbol_1099
      REAL(w2f__8) OpenAD_Symbol_1149
      type(active) :: OpenAD_Symbol_1154
      REAL(w2f__8) OpenAD_Symbol_1204
      REAL(w2f__8) OpenAD_Symbol_1155
      type(active) :: OpenAD_Symbol_1160
      type(active) :: OpenAD_Symbol_1205
      REAL(w2f__8) OpenAD_Symbol_1210
      type(active) :: OpenAD_Symbol_1156
      REAL(w2f__8) OpenAD_Symbol_1161
      REAL(w2f__8) OpenAD_Symbol_1206
      type(active) :: OpenAD_Symbol_1211
      REAL(w2f__8) OpenAD_Symbol_1157
      type(active) :: OpenAD_Symbol_1162
      type(active) :: OpenAD_Symbol_1207
      REAL(w2f__8) OpenAD_Symbol_1212
      type(active) :: OpenAD_Symbol_1158
      REAL(w2f__8) OpenAD_Symbol_1163
      REAL(w2f__8) OpenAD_Symbol_1208
      REAL(w2f__8) OpenAD_Symbol_1213
      REAL(w2f__8) OpenAD_Symbol_1159
      type(active) :: OpenAD_Symbol_1164
      type(active) :: OpenAD_Symbol_1209
      type(active) :: OpenAD_Symbol_1214
      REAL(w2f__8) OpenAD_Symbol_1165
      type(active) :: OpenAD_Symbol_1170
      REAL(w2f__8) OpenAD_Symbol_1215
      REAL(w2f__8) OpenAD_Symbol_1220
      type(active) :: OpenAD_Symbol_1166
      REAL(w2f__8) OpenAD_Symbol_1171
      REAL(w2f__8) OpenAD_Symbol_1216
      type(active) :: OpenAD_Symbol_1221
      REAL(w2f__8) OpenAD_Symbol_1167
      type(active) :: OpenAD_Symbol_1172
      type(active) :: OpenAD_Symbol_1217
      REAL(w2f__8) OpenAD_Symbol_1222
      type(active) :: OpenAD_Symbol_1168
      REAL(w2f__8) OpenAD_Symbol_1173
      REAL(w2f__8) OpenAD_Symbol_1218
      REAL(w2f__8) OpenAD_Symbol_1223
      REAL(w2f__8) OpenAD_Symbol_1169
      REAL(w2f__8) OpenAD_Symbol_1174
      type(active) :: OpenAD_Symbol_1219
      REAL(w2f__8) OpenAD_Symbol_1224
      type(active) :: OpenAD_Symbol_1175
      REAL(w2f__8) OpenAD_Symbol_1180
      REAL(w2f__8) OpenAD_Symbol_1225
      REAL(w2f__8) OpenAD_Symbol_1230
      REAL(w2f__8) OpenAD_Symbol_1176
      type(active) :: OpenAD_Symbol_1181
      REAL(w2f__8) OpenAD_Symbol_1226
      REAL(w2f__8) OpenAD_Symbol_1231
      type(active) :: OpenAD_Symbol_1177
      REAL(w2f__8) OpenAD_Symbol_1182
      REAL(w2f__8) OpenAD_Symbol_1227
      type(active) :: OpenAD_Symbol_1232
      REAL(w2f__8) OpenAD_Symbol_1178
      REAL(w2f__8) OpenAD_Symbol_1183
      REAL(w2f__8) OpenAD_Symbol_1228
      REAL(w2f__8) OpenAD_Symbol_1233
      type(active) :: OpenAD_Symbol_1179
      REAL(w2f__8) OpenAD_Symbol_1184
      type(active) :: OpenAD_Symbol_1229
      REAL(w2f__8) OpenAD_Symbol_1234
      REAL(w2f__8) OpenAD_Symbol_1185
      type(active) :: OpenAD_Symbol_1190
      type(active) :: OpenAD_Symbol_1235
      REAL(w2f__8) OpenAD_Symbol_1240
      type(active) :: OpenAD_Symbol_1186
      REAL(w2f__8) OpenAD_Symbol_1191
      REAL(w2f__8) OpenAD_Symbol_1236
      type(active) :: OpenAD_Symbol_1241
      REAL(w2f__8) OpenAD_Symbol_1187
      REAL(w2f__8) OpenAD_Symbol_1192
      REAL(w2f__8) OpenAD_Symbol_1237
      REAL(w2f__8) OpenAD_Symbol_1242
      type(active) :: OpenAD_Symbol_1188
      type(active) :: OpenAD_Symbol_1193
      type(active) :: OpenAD_Symbol_1238
      type(active) :: OpenAD_Symbol_1243
      REAL(w2f__8) OpenAD_Symbol_1189
      REAL(w2f__8) OpenAD_Symbol_1194
      REAL(w2f__8) OpenAD_Symbol_1239
      REAL(w2f__8) OpenAD_Symbol_1244
      type(active) :: OpenAD_Symbol_1195
      type(active) :: OpenAD_Symbol_1245
      REAL(w2f__8) OpenAD_Symbol_1250
      REAL(w2f__8) OpenAD_Symbol_1300
      REAL(w2f__8) OpenAD_Symbol_1196
      REAL(w2f__8) OpenAD_Symbol_1246
      REAL(w2f__8) OpenAD_Symbol_1251
      type(active) :: OpenAD_Symbol_1301
      type(active) :: OpenAD_Symbol_1197
      REAL(w2f__8) OpenAD_Symbol_1247
      REAL(w2f__8) OpenAD_Symbol_1252
      REAL(w2f__8) OpenAD_Symbol_1302
      REAL(w2f__8) OpenAD_Symbol_1198
      REAL(w2f__8) OpenAD_Symbol_1248
      REAL(w2f__8) OpenAD_Symbol_1253
      REAL(w2f__8) OpenAD_Symbol_1303
      REAL(w2f__8) OpenAD_Symbol_1199
      REAL(w2f__8) OpenAD_Symbol_1249
      REAL(w2f__8) OpenAD_Symbol_1254
      type(active) :: OpenAD_Symbol_1304
      REAL(w2f__8) OpenAD_Symbol_1310
      REAL(w2f__8) OpenAD_Symbol_1305
      type(active) :: OpenAD_Symbol_1255
      REAL(w2f__8) OpenAD_Symbol_1260
      type(active) :: OpenAD_Symbol_1311
      REAL(w2f__8) OpenAD_Symbol_1306
      REAL(w2f__8) OpenAD_Symbol_1256
      type(active) :: OpenAD_Symbol_1261
      REAL(w2f__8) OpenAD_Symbol_1312
      type(active) :: OpenAD_Symbol_1307
      REAL(w2f__8) OpenAD_Symbol_1257
      REAL(w2f__8) OpenAD_Symbol_1262
      REAL(w2f__8) OpenAD_Symbol_1313
      REAL(w2f__8) OpenAD_Symbol_1308
      REAL(w2f__8) OpenAD_Symbol_1258
      type(active) :: OpenAD_Symbol_1263
      REAL(w2f__8) OpenAD_Symbol_1314
      type(active) :: OpenAD_Symbol_1309
      type(active) :: OpenAD_Symbol_1259
      REAL(w2f__8) OpenAD_Symbol_1264
      REAL(w2f__8) OpenAD_Symbol_1320
      REAL(w2f__8) OpenAD_Symbol_1315
      REAL(w2f__8) OpenAD_Symbol_1265
      REAL(w2f__8) OpenAD_Symbol_1270
      type(active) :: OpenAD_Symbol_1321
      REAL(w2f__8) OpenAD_Symbol_1316
      REAL(w2f__8) OpenAD_Symbol_1266
      type(active) :: OpenAD_Symbol_1271
      REAL(w2f__8) OpenAD_Symbol_1322
      REAL(w2f__8) OpenAD_Symbol_1317
      type(active) :: OpenAD_Symbol_1267
      REAL(w2f__8) OpenAD_Symbol_1272
      REAL(w2f__8) OpenAD_Symbol_1323
      REAL(w2f__8) OpenAD_Symbol_1318
      REAL(w2f__8) OpenAD_Symbol_1268
      type(active) :: OpenAD_Symbol_1273
      type(active) :: OpenAD_Symbol_1324
      REAL(w2f__8) OpenAD_Symbol_1319
      type(active) :: OpenAD_Symbol_1269
      REAL(w2f__8) OpenAD_Symbol_1274
      REAL(w2f__8) OpenAD_Symbol_1330
      REAL(w2f__8) OpenAD_Symbol_1325
      type(active) :: OpenAD_Symbol_1275
      type(active) :: OpenAD_Symbol_1280
      type(active) :: OpenAD_Symbol_1331
      REAL(w2f__8) OpenAD_Symbol_1326
      REAL(w2f__8) OpenAD_Symbol_1276
      REAL(w2f__8) OpenAD_Symbol_1281
      type(active) :: OpenAD_Symbol_1327
      type(active) :: OpenAD_Symbol_1277
      REAL(w2f__8) OpenAD_Symbol_1282
      REAL(w2f__8) OpenAD_Symbol_1328
      REAL(w2f__8) OpenAD_Symbol_1278
      type(active) :: OpenAD_Symbol_1283
      type(active) :: OpenAD_Symbol_1329
      REAL(w2f__8) OpenAD_Symbol_1279
      REAL(w2f__8) OpenAD_Symbol_1284
      type(active) :: OpenAD_Symbol_1285
      REAL(w2f__8) OpenAD_Symbol_1290
      REAL(w2f__8) OpenAD_Symbol_1286
      REAL(w2f__8) OpenAD_Symbol_1291
      type(active) :: OpenAD_Symbol_1287
      REAL(w2f__8) OpenAD_Symbol_1292
      REAL(w2f__8) OpenAD_Symbol_1288
      REAL(w2f__8) OpenAD_Symbol_1293
      REAL(w2f__8) OpenAD_Symbol_1289
      REAL(w2f__8) OpenAD_Symbol_1294
      type(active) :: OpenAD_Symbol_1295
      REAL(w2f__8) OpenAD_Symbol_1296
      REAL(w2f__8) OpenAD_Symbol_1297
      type(active) :: OpenAD_Symbol_1298
      REAL(w2f__8) OpenAD_Symbol_1299
C
C     **** Parameters and Result ****
C
      INTEGER(w2f__i4) NCTRL
      type(active) :: XC(1 : NCTRL)
      type(active) :: COST_FINAL
C
C     **** Local Variables and functions ****
C
      INTEGER(w2f__i8) t__109
      INTEGER(w2f__i8) t__110
      LOGICAL(w2f__i4) CALC_COST
      type(active) :: COST
      type(active) :: COST_D
      type(active) :: COST_GD
      type(active) :: COST_SD
      type(active) :: FRICTU
      type(active) :: FRICTV
      type(active) :: FU
      type(active) :: FV
      type(active) :: GRADETAU
      type(active) :: GRADETAV
      EXTERNAL ini_io
      EXTERNAL is_eta_data_time
      INTEGER(w2f__i4) IT
      INTEGER(w2f__i4) IX
      INTEGER(w2f__i4) IY
      INTEGER(w2f__i4) JT
      INTEGER(w2f__i4) JX
      INTEGER(w2f__i4) JY
      INTEGER(w2f__i4) K
      INTEGER(w2f__i4) NINNER
      PARAMETER ( NINNER = 1000)
      INTEGER(w2f__i4) NIO
      INTEGER(w2f__i4) NOUTER
      INTEGER(w2f__i4) NTOTAL
      REAL(w2f__4) ONE
      PARAMETER ( ONE =     1.000000)
      EXTERNAL pfields_io
      type(active) :: ROUTIN
      LOGICAL(w2f__i4) TESTRESULT
      type(active) :: TIME
      INTEGER(w2f__i4) TIME_INDEX
      type(active) :: ZONAL_TRANSPORT
C
C     **** Temporary variables ****
C
      INTEGER(w2f__i4) doloop_ub
C
C     **** statements ****
C
      t__109 = NCTRL
      t__110 = MAX(t__109, 0_w2f__i8)
      IF(CALC_HESS .OR.(OPTIMIZE .OR.(GRAD_CHECK .OR. INITIAL_GRAD)))
     >  THEN
        CALC_COST = .TRUE.
      ELSE
        CALC_COST = .FALSE.
      ENDIF
      COST_D%v = 0.0D00
      COST_SD%v = 0.0D00
      COST_GD%v = 0.0D00
      COST%v = 0.0D00
      CALL zero_deriv(COST_D)
      CALL zero_deriv(COST_SD)
      CALL zero_deriv(COST_GD)
      CALL zero_deriv(COST)
      DO IY = 1, 20, 1
        DO IX = 1, 20, 1
          DEPTH(INT(IX),INT(IY))%v = 0.0D00
          INVHU(INT(IX),INT(IY))%v = 0.0D00
          INVHV(INT(IX),INT(IY))%v = 0.0D00
          CALL zero_deriv(DEPTH(INT(IX),INT(IY)))
          CALL zero_deriv(INVHU(INT(IX),INT(IY)))
          CALL zero_deriv(INVHV(INT(IX),INT(IY)))
        END DO
      END DO
      K = 0
      DO IY = 1, 20, 1
        DO IX = 1, 20, 1
          IF (ETAMASK(IX,IY)%v .ne. 0.0D00) THEN
            K = K + 1
            OpenAD_Symbol_285 = (XC(K)%v+1.0D00)
            OpenAD_Symbol_290 = (SCALEDEPTH(IX,IY)%v*OpenAD_Symbol_285)
            OpenAD_Symbol_286 = OpenAD_Symbol_285
            OpenAD_Symbol_288 = 1_w2f__i8
            OpenAD_Symbol_287 = SCALEDEPTH(IX,IY)%v
            DEPTH(INT(IX),INT(IY))%v = OpenAD_Symbol_290
            OpenAD_Symbol_939 = (OpenAD_Symbol_288 * OpenAD_Symbol_287)
            OpenAD_Symbol_941 = OpenAD_Symbol_286
            CALL setderiv(OpenAD_Symbol_942,SCALEDEPTH(IX,IY))
            CALL setderiv(OpenAD_Symbol_940,XC(K))
            CALL sax(OpenAD_Symbol_939,OpenAD_Symbol_940,DEPTH(IX,IY))
            CALL saxpy(OpenAD_Symbol_941,OpenAD_Symbol_942,DEPTH(IX,IY))
          ENDIF
        END DO
      END DO
      IF(NCTRL .ne. K) THEN
        WRITE(*, *) 'map_from_control_vector: ',
     >  'dimensions of control vector are wrong'
        WRITE(*, *) K, ' should be ', NCTRL
      ENDIF
      DO IY = 1, 21, 1
        DO IX = 1, 21, 1
          OpenAD_Symbol_293 = (DEPTH(IX,IY)%v*UMASK(IX,IY)%v)
          OpenAD_Symbol_291 = UMASK(IX,IY)%v
          OpenAD_Symbol_292 = DEPTH(IX,IY)%v
          HU(INT(IX),INT(IY))%v = OpenAD_Symbol_293
          OpenAD_Symbol_943 = OpenAD_Symbol_291
          OpenAD_Symbol_945 = OpenAD_Symbol_292
          CALL setderiv(OpenAD_Symbol_946,UMASK(IX,IY))
          CALL setderiv(OpenAD_Symbol_944,DEPTH(IX,IY))
          CALL sax(OpenAD_Symbol_943,OpenAD_Symbol_944,HU(IX,IY))
          CALL saxpy(OpenAD_Symbol_945,OpenAD_Symbol_946,HU(IX,IY))
          OpenAD_Symbol_296 = (DEPTH(IX,IY)%v*VMASK(IX,IY)%v)
          OpenAD_Symbol_294 = VMASK(IX,IY)%v
          OpenAD_Symbol_295 = DEPTH(IX,IY)%v
          HV(INT(IX),INT(IY))%v = OpenAD_Symbol_296
          OpenAD_Symbol_947 = OpenAD_Symbol_294
          OpenAD_Symbol_949 = OpenAD_Symbol_295
          CALL setderiv(OpenAD_Symbol_950,VMASK(IX,IY))
          CALL setderiv(OpenAD_Symbol_948,DEPTH(IX,IY))
          CALL sax(OpenAD_Symbol_947,OpenAD_Symbol_948,HV(IX,IY))
          CALL saxpy(OpenAD_Symbol_949,OpenAD_Symbol_950,HV(IX,IY))
          IF (HU(IX,IY)%v .ne. 0.0D00) THEN
            OpenAD_Symbol_299 = (1.0D00/HU(IX,IY)%v)
            OpenAD_Symbol_298 = (-(1.0D00/(HU(IX,IY)%v*HU(IX,IY)%v)))
            INVHU(INT(IX),INT(IY))%v = OpenAD_Symbol_299
            OpenAD_Symbol_951 = OpenAD_Symbol_298
            CALL setderiv(OpenAD_Symbol_952,HU(IX,IY))
            CALL sax(OpenAD_Symbol_951,OpenAD_Symbol_952,INVHU(IX,IY))
          ENDIF
          IF (HV(IX,IY)%v .ne. 0.0D00) THEN
            OpenAD_Symbol_302 = (1.0D00/HV(IX,IY)%v)
            OpenAD_Symbol_301 = (-(1.0D00/(HV(IX,IY)%v*HV(IX,IY)%v)))
            INVHV(INT(IX),INT(IY))%v = OpenAD_Symbol_302
            OpenAD_Symbol_953 = OpenAD_Symbol_301
            CALL setderiv(OpenAD_Symbol_954,HV(IX,IY))
            CALL sax(OpenAD_Symbol_953,OpenAD_Symbol_954,INVHV(IX,IY))
          ENDIF
        END DO
      END DO
      DO IY = 1, 20, 1
        DO IX = 1, 20, 1
          OpenAD_Symbol_305 = (UINI(IX,IY)%v*UMASK(IX,IY)%v)
          OpenAD_Symbol_303 = UMASK(IX,IY)%v
          OpenAD_Symbol_304 = UINI(IX,IY)%v
          U(INT(IX),INT(IY))%v = OpenAD_Symbol_305
          OpenAD_Symbol_955 = OpenAD_Symbol_303
          OpenAD_Symbol_957 = OpenAD_Symbol_304
          CALL setderiv(OpenAD_Symbol_958,UMASK(IX,IY))
          CALL setderiv(OpenAD_Symbol_956,UINI(IX,IY))
          CALL sax(OpenAD_Symbol_955,OpenAD_Symbol_956,U(IX,IY))
          CALL saxpy(OpenAD_Symbol_957,OpenAD_Symbol_958,U(IX,IY))
          OpenAD_Symbol_308 = (VINI(IX,IY)%v*VMASK(IX,IY)%v)
          OpenAD_Symbol_306 = VMASK(IX,IY)%v
          OpenAD_Symbol_307 = VINI(IX,IY)%v
          V(INT(IX),INT(IY))%v = OpenAD_Symbol_308
          OpenAD_Symbol_959 = OpenAD_Symbol_306
          OpenAD_Symbol_961 = OpenAD_Symbol_307
          CALL setderiv(OpenAD_Symbol_962,VMASK(IX,IY))
          CALL setderiv(OpenAD_Symbol_960,VINI(IX,IY))
          CALL sax(OpenAD_Symbol_959,OpenAD_Symbol_960,V(IX,IY))
          CALL saxpy(OpenAD_Symbol_961,OpenAD_Symbol_962,V(IX,IY))
          OpenAD_Symbol_311 = (ETAINI(IX,IY)%v*ETAMASK(IX,IY)%v)
          OpenAD_Symbol_309 = ETAMASK(IX,IY)%v
          OpenAD_Symbol_310 = ETAINI(IX,IY)%v
          ETA(INT(IX),INT(IY))%v = OpenAD_Symbol_311
          OpenAD_Symbol_963 = OpenAD_Symbol_309
          OpenAD_Symbol_965 = OpenAD_Symbol_310
          CALL setderiv(OpenAD_Symbol_966,ETAMASK(IX,IY))
          CALL setderiv(OpenAD_Symbol_964,ETAINI(IX,IY))
          CALL sax(OpenAD_Symbol_963,OpenAD_Symbol_964,ETA(IX,IY))
          CALL saxpy(OpenAD_Symbol_965,OpenAD_Symbol_966,ETA(IX,IY))
        END DO
      END DO
      IF(XPERIODIC) THEN
        DO IY = 0, 21, 1
          U(21,INT(IY))%v = U(1,IY)%v
          CALL setderiv(U(21,IY),U(1,IY))
          V(0,INT(IY))%v = V(20,IY)%v
          CALL setderiv(V(0,IY),V(20,IY))
          ETA(0,INT(IY))%v = ETA(20,IY)%v
          CALL setderiv(ETA(0,IY),ETA(20,IY))
        END DO
      ENDIF
      IF(YPERIODIC) THEN
        DO IX = 0, 21, 1
          U(INT(IX),0)%v = U(IX,20)%v
          CALL setderiv(U(IX,0),U(IX,20))
          V(INT(IX),21)%v = V(IX,1)%v
          CALL setderiv(V(IX,21),V(IX,1))
          ETA(INT(IX),0)%v = ETA(IX,0)%v
          CALL setderiv(ETA(IX,0),ETA(IX,0))
        END DO
      ENDIF
      IF(.NOT. SUPPRESSIO) THEN
        CALL ini_io()
        CALL pfields_io()
      ENDIF
      IF(CALC_COST) THEN
        DO IY = 1, 20, 1
          DO JY = 1, 20, 1
            DO IX = 1, 20, 1
              DO JX = 1, 20, 1
                OpenAD_Symbol_321 = (DEPTH(IX,IY)%v-DEPTH_DATA(IX,IY)%v)
                OpenAD_Symbol_318 = (OpenAD_Symbol_321 * 5.0D-01)
                OpenAD_Symbol_314 = (WEIGHT_DEPTH(IX,JX,IY,JY)%v*OpenAD_
     +Symbol_318)
                OpenAD_Symbol_315 = (DEPTH(JX,JY)%v-DEPTH_DATA(JX,JY)%v)
                OpenAD_Symbol_328 = (COST_D%v+OpenAD_Symbol_314*OpenAD_S
     +ymbol_315)
                OpenAD_Symbol_312 = 1_w2f__i8
                OpenAD_Symbol_319 = OpenAD_Symbol_318
                OpenAD_Symbol_324 = 1_w2f__i8
                OpenAD_Symbol_325 = (-1_w2f__i8)
                OpenAD_Symbol_322 = 5.0D-01
                OpenAD_Symbol_320 = WEIGHT_DEPTH(IX,JX,IY,JY)%v
                OpenAD_Symbol_316 = OpenAD_Symbol_315
                OpenAD_Symbol_326 = 1_w2f__i8
                OpenAD_Symbol_327 = (-1_w2f__i8)
                OpenAD_Symbol_317 = OpenAD_Symbol_314
                OpenAD_Symbol_313 = 1_w2f__i8
                COST_D%v = OpenAD_Symbol_328
                OpenAD_Symbol_967 = (OpenAD_Symbol_316 *
     >  OpenAD_Symbol_313)
                OpenAD_Symbol_968 = (OpenAD_Symbol_317 *
     >  OpenAD_Symbol_313)
                OpenAD_Symbol_969 = (OpenAD_Symbol_319 *
     >  OpenAD_Symbol_967)
                OpenAD_Symbol_971 = (OpenAD_Symbol_320 *
     >  OpenAD_Symbol_967)
                OpenAD_Symbol_972 = (OpenAD_Symbol_326 *
     >  OpenAD_Symbol_968)
                OpenAD_Symbol_974 = (OpenAD_Symbol_327 *
     >  OpenAD_Symbol_968)
                OpenAD_Symbol_976 = (OpenAD_Symbol_322 *
     >  OpenAD_Symbol_971)
                OpenAD_Symbol_977 = (OpenAD_Symbol_324 *
     >  OpenAD_Symbol_976)
                OpenAD_Symbol_979 = (OpenAD_Symbol_325 *
     >  OpenAD_Symbol_976)
                OpenAD_Symbol_981 = OpenAD_Symbol_312
                CALL setderiv(OpenAD_Symbol_982,COST_D)
                CALL setderiv(OpenAD_Symbol_980,DEPTH_DATA(IX,IY))
                CALL setderiv(OpenAD_Symbol_978,DEPTH(IX,IY))
                CALL setderiv(OpenAD_Symbol_975,DEPTH_DATA(JX,JY))
                CALL setderiv(OpenAD_Symbol_973,DEPTH(JX,JY))
                CALL setderiv(OpenAD_Symbol_970,WEIGHT_DEPTH(IX,JX,IY,JY
     +))
                CALL sax(OpenAD_Symbol_969,OpenAD_Symbol_970,COST_D)
                CALL saxpy(OpenAD_Symbol_972,OpenAD_Symbol_973,COST_D)
                CALL saxpy(OpenAD_Symbol_974,OpenAD_Symbol_975,COST_D)
                CALL saxpy(OpenAD_Symbol_977,OpenAD_Symbol_978,COST_D)
                CALL saxpy(OpenAD_Symbol_979,OpenAD_Symbol_980,COST_D)
                CALL saxpy(OpenAD_Symbol_981,OpenAD_Symbol_982,COST_D)
              END DO
            END DO
          END DO
        END DO
      ENDIF
      NIO = 0
      TIME_INDEX = 0
      TIME%v = 0.0D00
      CALL zero_deriv(TIME)
      NTOTAL = NT + NTSPINUP
      ROUTIN%v = (REAL(NTOTAL)/REAL(INT(1000 _w2f__i8)))
      CALL zero_deriv(ROUTIN)
      IF ((NTOTAL/INT(1000 _w2f__i8)) .ne. ROUTIN%v) THEN
        NOUTER = INT(ROUTIN%v)+1
      ELSE
        NOUTER = INT(ROUTIN%v)
      ENDIF
      IF(FULLIO .AND.(.NOT. SUPPRESSIO)) THEN
        WRITE(*, *) 'number of outer loops',
     >  ' = number of tape records = ', NOUTER
      ENDIF
      TIME_INDEX = 0
      OpenAD_Symbol_333 = (START_TIME%v+TIME_INDEX*DT%v)
      OpenAD_Symbol_329 = 1_w2f__i8
      OpenAD_Symbol_332 = TIME_INDEX
      OpenAD_Symbol_330 = 1_w2f__i8
      TIME%v = OpenAD_Symbol_333
      OpenAD_Symbol_983 = (OpenAD_Symbol_332 * OpenAD_Symbol_330)
      OpenAD_Symbol_985 = OpenAD_Symbol_329
      CALL setderiv(OpenAD_Symbol_986,START_TIME)
      CALL setderiv(OpenAD_Symbol_984,DT)
      CALL sax(OpenAD_Symbol_983,OpenAD_Symbol_984,TIME)
      CALL saxpy(OpenAD_Symbol_985,OpenAD_Symbol_986,TIME)
      IF(.NOT. SUPPRESSIO) THEN
        NIO = NIO + 1
        WRITE(*, *) 'Writing Time Step ', TIME_INDEX
      ENDIF
      doloop_ub = NOUTER
      DO IT = 1, doloop_ub, 1
        DO JT = 1, 1000, 1
          TIME_INDEX = JT + IT * 1000 +(-1000)
          OpenAD_Symbol_338 = (START_TIME%v+TIME_INDEX*DT%v)
          OpenAD_Symbol_334 = 1_w2f__i8
          OpenAD_Symbol_337 = TIME_INDEX
          OpenAD_Symbol_335 = 1_w2f__i8
          TIME%v = OpenAD_Symbol_338
          OpenAD_Symbol_987 = (OpenAD_Symbol_337 * OpenAD_Symbol_335)
          OpenAD_Symbol_989 = OpenAD_Symbol_334
          CALL setderiv(OpenAD_Symbol_990,START_TIME)
          CALL setderiv(OpenAD_Symbol_988,DT)
          CALL sax(OpenAD_Symbol_987,OpenAD_Symbol_988,TIME)
          CALL saxpy(OpenAD_Symbol_989,OpenAD_Symbol_990,TIME)
          IF(NTOTAL .GE. TIME_INDEX) THEN
            IF(MOD(TIME_INDEX, INT(2_w2f__i8)) .ne. INT(0_w2f__i8))
     >  THEN
              DO IY = 1, 20, 1
                DO IX = 1, 20, 1
                  OpenAD_Symbol_342 = (FRICT(IX,IY)%v+FRICT(IX+(-1),IY)%
     +v)
                  OpenAD_Symbol_339 = (OpenAD_Symbol_342 * 5.0D-01)
                  OpenAD_Symbol_347 = (INVHU(IX,IY)%v*OpenAD_Symbol_339)
                  OpenAD_Symbol_340 = OpenAD_Symbol_339
                  OpenAD_Symbol_345 = 1_w2f__i8
                  OpenAD_Symbol_346 = 1_w2f__i8
                  OpenAD_Symbol_343 = 5.0D-01
                  OpenAD_Symbol_341 = INVHU(IX,IY)%v
                  FRICTU%v = OpenAD_Symbol_347
                  OpenAD_Symbol_991 = (OpenAD_Symbol_343 *
     >  OpenAD_Symbol_341)
                  OpenAD_Symbol_992 = (OpenAD_Symbol_345 *
     >  OpenAD_Symbol_991)
                  OpenAD_Symbol_994 = (OpenAD_Symbol_346 *
     >  OpenAD_Symbol_991)
                  OpenAD_Symbol_996 = OpenAD_Symbol_340
                  CALL setderiv(OpenAD_Symbol_997,INVHU(IX,IY))
                  CALL setderiv(OpenAD_Symbol_995,FRICT(IX+(-1),IY))
                  CALL setderiv(OpenAD_Symbol_993,FRICT(IX,IY))
                  CALL sax(OpenAD_Symbol_992,OpenAD_Symbol_993,FRICTU)
                  CALL saxpy(OpenAD_Symbol_994,OpenAD_Symbol_995,FRICTU)
                  CALL saxpy(OpenAD_Symbol_996,OpenAD_Symbol_997,FRICTU)
                  OpenAD_Symbol_348 = (ETA(IX,IY)%v-ETA(IX+(-1),IY)%v)
                  OpenAD_Symbol_354 = (RX(IY)%v*5.0D-01)
                  OpenAD_Symbol_355 = (DX(IX)%v+DX(IX+(-1))%v)
                  OpenAD_Symbol_349 = (OpenAD_Symbol_354 *
     >  OpenAD_Symbol_355)
                  OpenAD_Symbol_362 = (OpenAD_Symbol_348 /
     >  OpenAD_Symbol_349)
                  OpenAD_Symbol_352 = 1_w2f__i8
                  OpenAD_Symbol_353 = (-1_w2f__i8)
                  OpenAD_Symbol_350 = (INT(1_w2f__i8) /
     >  OpenAD_Symbol_349)
                  OpenAD_Symbol_358 = 5.0D-01
                  OpenAD_Symbol_356 = OpenAD_Symbol_355
                  OpenAD_Symbol_360 = 1_w2f__i8
                  OpenAD_Symbol_361 = 1_w2f__i8
                  OpenAD_Symbol_357 = OpenAD_Symbol_354
                  OpenAD_Symbol_351 = (-(OpenAD_Symbol_348 /(
     > OpenAD_Symbol_349 * OpenAD_Symbol_349)))
                  GRADETAU%v = OpenAD_Symbol_362
                  OpenAD_Symbol_998 = (OpenAD_Symbol_356 *
     >  OpenAD_Symbol_351)
                  OpenAD_Symbol_999 = (OpenAD_Symbol_357 *
     >  OpenAD_Symbol_351)
                  OpenAD_Symbol_1000 = (OpenAD_Symbol_360 *
     >  OpenAD_Symbol_999)
                  OpenAD_Symbol_1002 = (OpenAD_Symbol_361 *
     >  OpenAD_Symbol_999)
                  OpenAD_Symbol_1004 = (OpenAD_Symbol_352 *
     >  OpenAD_Symbol_350)
                  OpenAD_Symbol_1006 = (OpenAD_Symbol_353 *
     >  OpenAD_Symbol_350)
                  OpenAD_Symbol_1008 = (OpenAD_Symbol_358 *
     >  OpenAD_Symbol_998)
                  CALL setderiv(OpenAD_Symbol_1009,RX(IY))
                  CALL setderiv(OpenAD_Symbol_1007,ETA(IX+(-1),IY))
                  CALL setderiv(OpenAD_Symbol_1005,ETA(IX,IY))
                  CALL setderiv(OpenAD_Symbol_1003,DX(IX+(-1)))
                  CALL setderiv(OpenAD_Symbol_1001,DX(IX))
                  CALL sax(OpenAD_Symbol_1000,OpenAD_Symbol_1001,GRADETA
     +U)
                  CALL saxpy(OpenAD_Symbol_1002,OpenAD_Symbol_1003,GRADE
     +TAU)
                  CALL saxpy(OpenAD_Symbol_1004,OpenAD_Symbol_1005,GRADE
     +TAU)
                  CALL saxpy(OpenAD_Symbol_1006,OpenAD_Symbol_1007,GRADE
     +TAU)
                  CALL saxpy(OpenAD_Symbol_1008,OpenAD_Symbol_1009,GRADE
     +TAU)
                  OpenAD_Symbol_363 = (V(IX+(-1),IY+1)%v+V(IX,IY+1)%v+V(
     +IX,IY)%v+V(IX+(-1),IY)%v)
                  OpenAD_Symbol_372 = (FCORIU(IX,IY)%v*OpenAD_Symbol_363
     +)
                  OpenAD_Symbol_364 = OpenAD_Symbol_363
                  OpenAD_Symbol_366 = 1_w2f__i8
                  OpenAD_Symbol_368 = 1_w2f__i8
                  OpenAD_Symbol_370 = 1_w2f__i8
                  OpenAD_Symbol_371 = 1_w2f__i8
                  OpenAD_Symbol_369 = 1_w2f__i8
                  OpenAD_Symbol_367 = 1_w2f__i8
                  OpenAD_Symbol_365 = FCORIU(IX,IY)%v
                  FV%v = OpenAD_Symbol_372
                  OpenAD_Symbol_1010 = (OpenAD_Symbol_366 *
     >  OpenAD_Symbol_365)
                  OpenAD_Symbol_1012 = (OpenAD_Symbol_367 *
     >  OpenAD_Symbol_365)
                  OpenAD_Symbol_1013 = (OpenAD_Symbol_368 *
     >  OpenAD_Symbol_1012)
                  OpenAD_Symbol_1015 = (OpenAD_Symbol_369 *
     >  OpenAD_Symbol_1012)
                  OpenAD_Symbol_1016 = (OpenAD_Symbol_370 *
     >  OpenAD_Symbol_1015)
                  OpenAD_Symbol_1018 = (OpenAD_Symbol_371 *
     >  OpenAD_Symbol_1015)
                  OpenAD_Symbol_1020 = OpenAD_Symbol_364
                  CALL setderiv(OpenAD_Symbol_1021,FCORIU(IX,IY))
                  CALL setderiv(OpenAD_Symbol_1019,V(IX+(-1),IY))
                  CALL setderiv(OpenAD_Symbol_1017,V(IX,IY))
                  CALL setderiv(OpenAD_Symbol_1014,V(IX,IY+1))
                  CALL setderiv(OpenAD_Symbol_1011,V(IX+(-1),IY+1))
                  CALL sax(OpenAD_Symbol_1010,OpenAD_Symbol_1011,FV)
                  CALL saxpy(OpenAD_Symbol_1013,OpenAD_Symbol_1014,FV)
                  CALL saxpy(OpenAD_Symbol_1016,OpenAD_Symbol_1017,FV)
                  CALL saxpy(OpenAD_Symbol_1018,OpenAD_Symbol_1019,FV)
                  CALL saxpy(OpenAD_Symbol_1020,OpenAD_Symbol_1021,FV)
                  OpenAD_Symbol_382 = (FRICTU%v*5.0D-01)
                  OpenAD_Symbol_377 = (DT%v*OpenAD_Symbol_382+1.0D00)
                  OpenAD_Symbol_373 = (UMASK(IX,IY)%v/OpenAD_Symbol_377)
                  OpenAD_Symbol_400 = (FRICTU%v*5.0D-01)
                  OpenAD_Symbol_395 = (1.0D00-DT%v*OpenAD_Symbol_400)
                  OpenAD_Symbol_405 = (DT%v*9.81000000000000049738D00)
                  OpenAD_Symbol_410 = (UFORCE(IX,IY)%v*DT%v)
                  OpenAD_Symbol_374 = (FV%v*DT%v+U(IX,IY)%v*OpenAD_Symbo
     +l_395-GRADETAU%v*OpenAD_Symbol_405+INVHU(IX,IY)%v*OpenAD_Symbol_41
     +0)
                  OpenAD_Symbol_415 = (OpenAD_Symbol_373 *
     >  OpenAD_Symbol_374)
                  OpenAD_Symbol_378 = (INT(1_w2f__i8) /
     >  OpenAD_Symbol_377)
                  OpenAD_Symbol_383 = OpenAD_Symbol_382
                  OpenAD_Symbol_385 = 5.0D-01
                  OpenAD_Symbol_384 = DT%v
                  OpenAD_Symbol_380 = 1_w2f__i8
                  OpenAD_Symbol_379 = (-(UMASK(IX,IY)%v/(OpenAD_Symbol_3
     +77*OpenAD_Symbol_377)))
                  OpenAD_Symbol_375 = OpenAD_Symbol_374
                  OpenAD_Symbol_391 = DT%v
                  OpenAD_Symbol_392 = FV%v
                  OpenAD_Symbol_389 = 1_w2f__i8
                  OpenAD_Symbol_396 = OpenAD_Symbol_395
                  OpenAD_Symbol_401 = OpenAD_Symbol_400
                  OpenAD_Symbol_403 = 5.0D-01
                  OpenAD_Symbol_402 = DT%v
                  OpenAD_Symbol_399 = (-1_w2f__i8)
                  OpenAD_Symbol_397 = U(IX,IY)%v
                  OpenAD_Symbol_393 = 1_w2f__i8
                  OpenAD_Symbol_406 = OpenAD_Symbol_405
                  OpenAD_Symbol_408 = 9.81000000000000049738D00
                  OpenAD_Symbol_407 = GRADETAU%v
                  OpenAD_Symbol_394 = (-1_w2f__i8)
                  OpenAD_Symbol_390 = 1_w2f__i8
                  OpenAD_Symbol_387 = 1_w2f__i8
                  OpenAD_Symbol_411 = OpenAD_Symbol_410
                  OpenAD_Symbol_413 = DT%v
                  OpenAD_Symbol_414 = UFORCE(IX,IY)%v
                  OpenAD_Symbol_412 = INVHU(IX,IY)%v
                  OpenAD_Symbol_388 = 1_w2f__i8
                  OpenAD_Symbol_376 = OpenAD_Symbol_373
                  U(INT(IX),INT(IY))%v = OpenAD_Symbol_415
                  OpenAD_Symbol_1022 = (OpenAD_Symbol_387 *
     >  OpenAD_Symbol_376)
                  OpenAD_Symbol_1023 = (OpenAD_Symbol_388 *
     >  OpenAD_Symbol_376)
                  OpenAD_Symbol_1024 = (OpenAD_Symbol_389 *
     >  OpenAD_Symbol_1022)
                  OpenAD_Symbol_1025 = (OpenAD_Symbol_390 *
     >  OpenAD_Symbol_1022)
                  OpenAD_Symbol_1026 = (OpenAD_Symbol_393 *
     >  OpenAD_Symbol_1025)
                  OpenAD_Symbol_1027 = (OpenAD_Symbol_394 *
     >  OpenAD_Symbol_1025)
                  OpenAD_Symbol_1028 = (OpenAD_Symbol_396 *
     >  OpenAD_Symbol_1026)
                  OpenAD_Symbol_1030 = (OpenAD_Symbol_397 *
     >  OpenAD_Symbol_1026)
                  OpenAD_Symbol_1031 = (OpenAD_Symbol_378 *
     >  OpenAD_Symbol_375)
                  OpenAD_Symbol_1033 = (OpenAD_Symbol_379 *
     >  OpenAD_Symbol_375)
                  OpenAD_Symbol_1034 = (OpenAD_Symbol_411 *
     >  OpenAD_Symbol_1023)
                  OpenAD_Symbol_1036 = (OpenAD_Symbol_412 *
     >  OpenAD_Symbol_1023)
                  OpenAD_Symbol_1037 = (OpenAD_Symbol_406 *
     >  OpenAD_Symbol_1027)
                  OpenAD_Symbol_1039 = (OpenAD_Symbol_407 *
     >  OpenAD_Symbol_1027)
                  OpenAD_Symbol_1040 = (OpenAD_Symbol_413 *
     >  OpenAD_Symbol_1036)
                  OpenAD_Symbol_1042 = (OpenAD_Symbol_414 *
     >  OpenAD_Symbol_1036)
                  OpenAD_Symbol_1044 = (OpenAD_Symbol_391 *
     >  OpenAD_Symbol_1024)
                  OpenAD_Symbol_1046 = (OpenAD_Symbol_392 *
     >  OpenAD_Symbol_1024)
                  OpenAD_Symbol_1047 = (OpenAD_Symbol_399 *
     >  OpenAD_Symbol_1030)
                  OpenAD_Symbol_1048 = (OpenAD_Symbol_401 *
     >  OpenAD_Symbol_1047)
                  OpenAD_Symbol_1049 = (OpenAD_Symbol_402 *
     >  OpenAD_Symbol_1047)
                  OpenAD_Symbol_1050 = (OpenAD_Symbol_380 *
     >  OpenAD_Symbol_1033)
                  OpenAD_Symbol_1051 = (OpenAD_Symbol_383 *
     >  OpenAD_Symbol_1050)
                  OpenAD_Symbol_1052 = (OpenAD_Symbol_384 *
     >  OpenAD_Symbol_1050)
                  OpenAD_Symbol_1053 = (OpenAD_Symbol_408 *
     >  OpenAD_Symbol_1039)
                  OpenAD_Symbol_1054 = (OpenAD_Symbol_403 *
     >  OpenAD_Symbol_1049)
                  OpenAD_Symbol_1056 = (OpenAD_Symbol_385 *
     >  OpenAD_Symbol_1052)
                  CALL setderiv(OpenAD_Symbol_1055,FRICTU)
                  CALL setderiv(OpenAD_Symbol_1045,FV)
                  CALL setderiv(OpenAD_Symbol_1043,DT)
                  CALL setderiv(OpenAD_Symbol_1041,UFORCE(IX,IY))
                  CALL setderiv(OpenAD_Symbol_1038,GRADETAU)
                  CALL setderiv(OpenAD_Symbol_1035,INVHU(IX,IY))
                  CALL setderiv(OpenAD_Symbol_1032,UMASK(IX,IY))
                  CALL setderiv(OpenAD_Symbol_1029,U(IX,IY))
                  CALL sax(OpenAD_Symbol_1028,OpenAD_Symbol_1029,U(IX,IY
     +))
                  CALL saxpy(OpenAD_Symbol_1031,OpenAD_Symbol_1032,U(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1034,OpenAD_Symbol_1035,U(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1037,OpenAD_Symbol_1038,U(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1040,OpenAD_Symbol_1041,U(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1042,OpenAD_Symbol_1043,U(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1044,OpenAD_Symbol_1045,U(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1046,OpenAD_Symbol_1043,U(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1048,OpenAD_Symbol_1043,U(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1051,OpenAD_Symbol_1043,U(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1053,OpenAD_Symbol_1043,U(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1054,OpenAD_Symbol_1055,U(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1056,OpenAD_Symbol_1055,U(IX,
     +IY))
                END DO
              END DO
              IF(XPERIODIC) THEN
                DO IY = 0, 21, 1
                  U(21,INT(IY))%v = U(1,IY)%v
                  CALL setderiv(U(21,IY),U(1,IY))
                END DO
              ENDIF
              IF(YPERIODIC) THEN
                DO IX = 0, 21, 1
                  U(INT(IX),0)%v = U(IX,20)%v
                  CALL setderiv(U(IX,0),U(IX,20))
                END DO
              ENDIF
              DO IY = 1, 20, 1
                DO IX = 1, 20, 1
                  OpenAD_Symbol_419 = (FRICT(IX,IY)%v+FRICT(IX,IY+(-1))%
     +v)
                  OpenAD_Symbol_416 = (OpenAD_Symbol_419 * 5.0D-01)
                  OpenAD_Symbol_424 = (INVHV(IX,IY)%v*OpenAD_Symbol_416)
                  OpenAD_Symbol_417 = OpenAD_Symbol_416
                  OpenAD_Symbol_422 = 1_w2f__i8
                  OpenAD_Symbol_423 = 1_w2f__i8
                  OpenAD_Symbol_420 = 5.0D-01
                  OpenAD_Symbol_418 = INVHV(IX,IY)%v
                  FRICTV%v = OpenAD_Symbol_424
                  OpenAD_Symbol_1057 = (OpenAD_Symbol_420 *
     >  OpenAD_Symbol_418)
                  OpenAD_Symbol_1058 = (OpenAD_Symbol_422 *
     >  OpenAD_Symbol_1057)
                  OpenAD_Symbol_1060 = (OpenAD_Symbol_423 *
     >  OpenAD_Symbol_1057)
                  OpenAD_Symbol_1062 = OpenAD_Symbol_417
                  CALL setderiv(OpenAD_Symbol_1063,INVHV(IX,IY))
                  CALL setderiv(OpenAD_Symbol_1061,FRICT(IX,IY+(-1)))
                  CALL setderiv(OpenAD_Symbol_1059,FRICT(IX,IY))
                  CALL sax(OpenAD_Symbol_1058,OpenAD_Symbol_1059,FRICTV)
                  CALL saxpy(OpenAD_Symbol_1060,OpenAD_Symbol_1061,FRICT
     +V)
                  CALL saxpy(OpenAD_Symbol_1062,OpenAD_Symbol_1063,FRICT
     +V)
                  OpenAD_Symbol_425 = (ETA(IX,IY)%v-ETA(IX,IY+(-1))%v)
                  OpenAD_Symbol_431 = (RY%v*5.0D-01)
                  OpenAD_Symbol_432 = (DY(IY)%v+DY(IY+(-1))%v)
                  OpenAD_Symbol_426 = (OpenAD_Symbol_431 *
     >  OpenAD_Symbol_432)
                  OpenAD_Symbol_439 = (OpenAD_Symbol_425 /
     >  OpenAD_Symbol_426)
                  OpenAD_Symbol_429 = 1_w2f__i8
                  OpenAD_Symbol_430 = (-1_w2f__i8)
                  OpenAD_Symbol_427 = (INT(1_w2f__i8) /
     >  OpenAD_Symbol_426)
                  OpenAD_Symbol_435 = 5.0D-01
                  OpenAD_Symbol_433 = OpenAD_Symbol_432
                  OpenAD_Symbol_437 = 1_w2f__i8
                  OpenAD_Symbol_438 = 1_w2f__i8
                  OpenAD_Symbol_434 = OpenAD_Symbol_431
                  OpenAD_Symbol_428 = (-(OpenAD_Symbol_425 /(
     > OpenAD_Symbol_426 * OpenAD_Symbol_426)))
                  GRADETAV%v = OpenAD_Symbol_439
                  OpenAD_Symbol_1064 = (OpenAD_Symbol_433 *
     >  OpenAD_Symbol_428)
                  OpenAD_Symbol_1065 = (OpenAD_Symbol_434 *
     >  OpenAD_Symbol_428)
                  OpenAD_Symbol_1066 = (OpenAD_Symbol_437 *
     >  OpenAD_Symbol_1065)
                  OpenAD_Symbol_1068 = (OpenAD_Symbol_438 *
     >  OpenAD_Symbol_1065)
                  OpenAD_Symbol_1070 = (OpenAD_Symbol_429 *
     >  OpenAD_Symbol_427)
                  OpenAD_Symbol_1072 = (OpenAD_Symbol_430 *
     >  OpenAD_Symbol_427)
                  OpenAD_Symbol_1074 = (OpenAD_Symbol_435 *
     >  OpenAD_Symbol_1064)
                  CALL setderiv(OpenAD_Symbol_1075,RY)
                  CALL setderiv(OpenAD_Symbol_1073,ETA(IX,IY+(-1)))
                  CALL setderiv(OpenAD_Symbol_1071,ETA(IX,IY))
                  CALL setderiv(OpenAD_Symbol_1069,DY(IY+(-1)))
                  CALL setderiv(OpenAD_Symbol_1067,DY(IY))
                  CALL sax(OpenAD_Symbol_1066,OpenAD_Symbol_1067,GRADETA
     +V)
                  CALL saxpy(OpenAD_Symbol_1068,OpenAD_Symbol_1069,GRADE
     +TAV)
                  CALL saxpy(OpenAD_Symbol_1070,OpenAD_Symbol_1071,GRADE
     +TAV)
                  CALL saxpy(OpenAD_Symbol_1072,OpenAD_Symbol_1073,GRADE
     +TAV)
                  CALL saxpy(OpenAD_Symbol_1074,OpenAD_Symbol_1075,GRADE
     +TAV)
                  OpenAD_Symbol_440 = (U(IX+1,IY+(-1))%v+U(IX,IY+(-1))%v
     ++U(IX,IY)%v+U(IX+1,IY)%v)
                  OpenAD_Symbol_449 = (FCORIV(IX,IY)%v*OpenAD_Symbol_440
     +)
                  OpenAD_Symbol_441 = OpenAD_Symbol_440
                  OpenAD_Symbol_443 = 1_w2f__i8
                  OpenAD_Symbol_445 = 1_w2f__i8
                  OpenAD_Symbol_447 = 1_w2f__i8
                  OpenAD_Symbol_448 = 1_w2f__i8
                  OpenAD_Symbol_446 = 1_w2f__i8
                  OpenAD_Symbol_444 = 1_w2f__i8
                  OpenAD_Symbol_442 = FCORIV(IX,IY)%v
                  FU%v = OpenAD_Symbol_449
                  OpenAD_Symbol_1076 = (OpenAD_Symbol_443 *
     >  OpenAD_Symbol_442)
                  OpenAD_Symbol_1078 = (OpenAD_Symbol_444 *
     >  OpenAD_Symbol_442)
                  OpenAD_Symbol_1079 = (OpenAD_Symbol_445 *
     >  OpenAD_Symbol_1078)
                  OpenAD_Symbol_1081 = (OpenAD_Symbol_446 *
     >  OpenAD_Symbol_1078)
                  OpenAD_Symbol_1082 = (OpenAD_Symbol_447 *
     >  OpenAD_Symbol_1081)
                  OpenAD_Symbol_1084 = (OpenAD_Symbol_448 *
     >  OpenAD_Symbol_1081)
                  OpenAD_Symbol_1086 = OpenAD_Symbol_441
                  CALL setderiv(OpenAD_Symbol_1087,FCORIV(IX,IY))
                  CALL setderiv(OpenAD_Symbol_1085,U(IX+1,IY))
                  CALL setderiv(OpenAD_Symbol_1083,U(IX,IY))
                  CALL setderiv(OpenAD_Symbol_1080,U(IX,IY+(-1)))
                  CALL setderiv(OpenAD_Symbol_1077,U(IX+1,IY+(-1)))
                  CALL sax(OpenAD_Symbol_1076,OpenAD_Symbol_1077,FU)
                  CALL saxpy(OpenAD_Symbol_1079,OpenAD_Symbol_1080,FU)
                  CALL saxpy(OpenAD_Symbol_1082,OpenAD_Symbol_1083,FU)
                  CALL saxpy(OpenAD_Symbol_1084,OpenAD_Symbol_1085,FU)
                  CALL saxpy(OpenAD_Symbol_1086,OpenAD_Symbol_1087,FU)
                  OpenAD_Symbol_459 = (FRICTV%v*5.0D-01)
                  OpenAD_Symbol_454 = (DT%v*OpenAD_Symbol_459+1.0D00)
                  OpenAD_Symbol_450 = (VMASK(IX,IY)%v/OpenAD_Symbol_454)
                  OpenAD_Symbol_466 = (VFORCE(IX,IY)%v*DT%v)
                  OpenAD_Symbol_480 = (FRICTV%v*5.0D-01)
                  OpenAD_Symbol_475 = (1.0D00-DT%v*OpenAD_Symbol_480)
                  OpenAD_Symbol_485 = (DT%v*9.81000000000000049738D00)
                  OpenAD_Symbol_451 = (INVHV(IX,IY)%v*OpenAD_Symbol_466+
     +V(IX,IY)%v*OpenAD_Symbol_475-GRADETAV%v*OpenAD_Symbol_485-FU%v*DT%
     +v)
                  OpenAD_Symbol_492 = (OpenAD_Symbol_450 *
     >  OpenAD_Symbol_451)
                  OpenAD_Symbol_455 = (INT(1_w2f__i8) /
     >  OpenAD_Symbol_454)
                  OpenAD_Symbol_460 = OpenAD_Symbol_459
                  OpenAD_Symbol_462 = 5.0D-01
                  OpenAD_Symbol_461 = DT%v
                  OpenAD_Symbol_457 = 1_w2f__i8
                  OpenAD_Symbol_456 = (-(VMASK(IX,IY)%v/(OpenAD_Symbol_4
     +54*OpenAD_Symbol_454)))
                  OpenAD_Symbol_452 = OpenAD_Symbol_451
                  OpenAD_Symbol_467 = OpenAD_Symbol_466
                  OpenAD_Symbol_469 = DT%v
                  OpenAD_Symbol_470 = VFORCE(IX,IY)%v
                  OpenAD_Symbol_468 = INVHV(IX,IY)%v
                  OpenAD_Symbol_464 = 1_w2f__i8
                  OpenAD_Symbol_476 = OpenAD_Symbol_475
                  OpenAD_Symbol_481 = OpenAD_Symbol_480
                  OpenAD_Symbol_483 = 5.0D-01
                  OpenAD_Symbol_482 = DT%v
                  OpenAD_Symbol_479 = (-1_w2f__i8)
                  OpenAD_Symbol_477 = V(IX,IY)%v
                  OpenAD_Symbol_473 = 1_w2f__i8
                  OpenAD_Symbol_486 = OpenAD_Symbol_485
                  OpenAD_Symbol_488 = 9.81000000000000049738D00
                  OpenAD_Symbol_487 = GRADETAV%v
                  OpenAD_Symbol_474 = (-1_w2f__i8)
                  OpenAD_Symbol_471 = 1_w2f__i8
                  OpenAD_Symbol_490 = DT%v
                  OpenAD_Symbol_491 = FU%v
                  OpenAD_Symbol_472 = (-1_w2f__i8)
                  OpenAD_Symbol_465 = 1_w2f__i8
                  OpenAD_Symbol_453 = OpenAD_Symbol_450
                  V(INT(IX),INT(IY))%v = OpenAD_Symbol_492
                  OpenAD_Symbol_1088 = (OpenAD_Symbol_464 *
     >  OpenAD_Symbol_453)
                  OpenAD_Symbol_1089 = (OpenAD_Symbol_465 *
     >  OpenAD_Symbol_453)
                  OpenAD_Symbol_1090 = (OpenAD_Symbol_471 *
     >  OpenAD_Symbol_1089)
                  OpenAD_Symbol_1091 = (OpenAD_Symbol_472 *
     >  OpenAD_Symbol_1089)
                  OpenAD_Symbol_1092 = (OpenAD_Symbol_473 *
     >  OpenAD_Symbol_1090)
                  OpenAD_Symbol_1093 = (OpenAD_Symbol_474 *
     >  OpenAD_Symbol_1090)
                  OpenAD_Symbol_1094 = (OpenAD_Symbol_476 *
     >  OpenAD_Symbol_1092)
                  OpenAD_Symbol_1096 = (OpenAD_Symbol_477 *
     >  OpenAD_Symbol_1092)
                  OpenAD_Symbol_1097 = (OpenAD_Symbol_455 *
     >  OpenAD_Symbol_452)
                  OpenAD_Symbol_1099 = (OpenAD_Symbol_456 *
     >  OpenAD_Symbol_452)
                  OpenAD_Symbol_1100 = (OpenAD_Symbol_486 *
     >  OpenAD_Symbol_1093)
                  OpenAD_Symbol_1102 = (OpenAD_Symbol_487 *
     >  OpenAD_Symbol_1093)
                  OpenAD_Symbol_1103 = (OpenAD_Symbol_467 *
     >  OpenAD_Symbol_1088)
                  OpenAD_Symbol_1105 = (OpenAD_Symbol_468 *
     >  OpenAD_Symbol_1088)
                  OpenAD_Symbol_1106 = (OpenAD_Symbol_490 *
     >  OpenAD_Symbol_1091)
                  OpenAD_Symbol_1108 = (OpenAD_Symbol_491 *
     >  OpenAD_Symbol_1091)
                  OpenAD_Symbol_1110 = (OpenAD_Symbol_469 *
     >  OpenAD_Symbol_1105)
                  OpenAD_Symbol_1112 = (OpenAD_Symbol_470 *
     >  OpenAD_Symbol_1105)
                  OpenAD_Symbol_1113 = (OpenAD_Symbol_479 *
     >  OpenAD_Symbol_1096)
                  OpenAD_Symbol_1114 = (OpenAD_Symbol_481 *
     >  OpenAD_Symbol_1113)
                  OpenAD_Symbol_1115 = (OpenAD_Symbol_482 *
     >  OpenAD_Symbol_1113)
                  OpenAD_Symbol_1116 = (OpenAD_Symbol_457 *
     >  OpenAD_Symbol_1099)
                  OpenAD_Symbol_1117 = (OpenAD_Symbol_460 *
     >  OpenAD_Symbol_1116)
                  OpenAD_Symbol_1118 = (OpenAD_Symbol_461 *
     >  OpenAD_Symbol_1116)
                  OpenAD_Symbol_1119 = (OpenAD_Symbol_488 *
     >  OpenAD_Symbol_1102)
                  OpenAD_Symbol_1120 = (OpenAD_Symbol_483 *
     >  OpenAD_Symbol_1115)
                  OpenAD_Symbol_1122 = (OpenAD_Symbol_462 *
     >  OpenAD_Symbol_1118)
                  CALL setderiv(OpenAD_Symbol_1121,FRICTV)
                  CALL setderiv(OpenAD_Symbol_1111,VFORCE(IX,IY))
                  CALL setderiv(OpenAD_Symbol_1109,DT)
                  CALL setderiv(OpenAD_Symbol_1107,FU)
                  CALL setderiv(OpenAD_Symbol_1104,INVHV(IX,IY))
                  CALL setderiv(OpenAD_Symbol_1101,GRADETAV)
                  CALL setderiv(OpenAD_Symbol_1098,VMASK(IX,IY))
                  CALL setderiv(OpenAD_Symbol_1095,V(IX,IY))
                  CALL sax(OpenAD_Symbol_1094,OpenAD_Symbol_1095,V(IX,IY
     +))
                  CALL saxpy(OpenAD_Symbol_1097,OpenAD_Symbol_1098,V(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1100,OpenAD_Symbol_1101,V(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1103,OpenAD_Symbol_1104,V(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1106,OpenAD_Symbol_1107,V(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1108,OpenAD_Symbol_1109,V(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1110,OpenAD_Symbol_1111,V(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1112,OpenAD_Symbol_1109,V(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1114,OpenAD_Symbol_1109,V(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1117,OpenAD_Symbol_1109,V(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1119,OpenAD_Symbol_1109,V(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1120,OpenAD_Symbol_1121,V(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1122,OpenAD_Symbol_1121,V(IX,
     +IY))
                END DO
              END DO
              IF(XPERIODIC) THEN
                DO IY = 0, 21, 1
                  V(0,INT(IY))%v = V(20,IY)%v
                  CALL setderiv(V(0,IY),V(20,IY))
                END DO
              ENDIF
              IF(YPERIODIC) THEN
                DO IX = 0, 21, 1
                  V(INT(IX),21)%v = V(IX,1)%v
                  CALL setderiv(V(IX,21),V(IX,1))
                END DO
              ENDIF
            ELSE
              DO IY = 1, 20, 1
                DO IX = 1, 20, 1
                  OpenAD_Symbol_559 = (FRICT(IX,IY)%v+FRICT(IX,IY+(-1))%
     +v)
                  OpenAD_Symbol_556 = (OpenAD_Symbol_559 * 5.0D-01)
                  OpenAD_Symbol_564 = (INVHV(IX,IY)%v*OpenAD_Symbol_556)
                  OpenAD_Symbol_557 = OpenAD_Symbol_556
                  OpenAD_Symbol_562 = 1_w2f__i8
                  OpenAD_Symbol_563 = 1_w2f__i8
                  OpenAD_Symbol_560 = 5.0D-01
                  OpenAD_Symbol_558 = INVHV(IX,IY)%v
                  FRICTV%v = OpenAD_Symbol_564
                  OpenAD_Symbol_1191 = (OpenAD_Symbol_560 *
     >  OpenAD_Symbol_558)
                  OpenAD_Symbol_1192 = (OpenAD_Symbol_562 *
     >  OpenAD_Symbol_1191)
                  OpenAD_Symbol_1194 = (OpenAD_Symbol_563 *
     >  OpenAD_Symbol_1191)
                  OpenAD_Symbol_1196 = OpenAD_Symbol_557
                  CALL setderiv(OpenAD_Symbol_1197,INVHV(IX,IY))
                  CALL setderiv(OpenAD_Symbol_1195,FRICT(IX,IY+(-1)))
                  CALL setderiv(OpenAD_Symbol_1193,FRICT(IX,IY))
                  CALL sax(OpenAD_Symbol_1192,OpenAD_Symbol_1193,FRICTV)
                  CALL saxpy(OpenAD_Symbol_1194,OpenAD_Symbol_1195,FRICT
     +V)
                  CALL saxpy(OpenAD_Symbol_1196,OpenAD_Symbol_1197,FRICT
     +V)
                  OpenAD_Symbol_565 = (ETA(IX,IY)%v-ETA(IX,IY+(-1))%v)
                  OpenAD_Symbol_571 = (RY%v*5.0D-01)
                  OpenAD_Symbol_572 = (DY(IY)%v+DY(IY+(-1))%v)
                  OpenAD_Symbol_566 = (OpenAD_Symbol_571 *
     >  OpenAD_Symbol_572)
                  OpenAD_Symbol_579 = (OpenAD_Symbol_565 /
     >  OpenAD_Symbol_566)
                  OpenAD_Symbol_569 = 1_w2f__i8
                  OpenAD_Symbol_570 = (-1_w2f__i8)
                  OpenAD_Symbol_567 = (INT(1_w2f__i8) /
     >  OpenAD_Symbol_566)
                  OpenAD_Symbol_575 = 5.0D-01
                  OpenAD_Symbol_573 = OpenAD_Symbol_572
                  OpenAD_Symbol_577 = 1_w2f__i8
                  OpenAD_Symbol_578 = 1_w2f__i8
                  OpenAD_Symbol_574 = OpenAD_Symbol_571
                  OpenAD_Symbol_568 = (-(OpenAD_Symbol_565 /(
     > OpenAD_Symbol_566 * OpenAD_Symbol_566)))
                  GRADETAV%v = OpenAD_Symbol_579
                  OpenAD_Symbol_1198 = (OpenAD_Symbol_573 *
     >  OpenAD_Symbol_568)
                  OpenAD_Symbol_1199 = (OpenAD_Symbol_574 *
     >  OpenAD_Symbol_568)
                  OpenAD_Symbol_1200 = (OpenAD_Symbol_577 *
     >  OpenAD_Symbol_1199)
                  OpenAD_Symbol_1202 = (OpenAD_Symbol_578 *
     >  OpenAD_Symbol_1199)
                  OpenAD_Symbol_1204 = (OpenAD_Symbol_569 *
     >  OpenAD_Symbol_567)
                  OpenAD_Symbol_1206 = (OpenAD_Symbol_570 *
     >  OpenAD_Symbol_567)
                  OpenAD_Symbol_1208 = (OpenAD_Symbol_575 *
     >  OpenAD_Symbol_1198)
                  CALL setderiv(OpenAD_Symbol_1209,RY)
                  CALL setderiv(OpenAD_Symbol_1207,ETA(IX,IY+(-1)))
                  CALL setderiv(OpenAD_Symbol_1205,ETA(IX,IY))
                  CALL setderiv(OpenAD_Symbol_1203,DY(IY+(-1)))
                  CALL setderiv(OpenAD_Symbol_1201,DY(IY))
                  CALL sax(OpenAD_Symbol_1200,OpenAD_Symbol_1201,GRADETA
     +V)
                  CALL saxpy(OpenAD_Symbol_1202,OpenAD_Symbol_1203,GRADE
     +TAV)
                  CALL saxpy(OpenAD_Symbol_1204,OpenAD_Symbol_1205,GRADE
     +TAV)
                  CALL saxpy(OpenAD_Symbol_1206,OpenAD_Symbol_1207,GRADE
     +TAV)
                  CALL saxpy(OpenAD_Symbol_1208,OpenAD_Symbol_1209,GRADE
     +TAV)
                  OpenAD_Symbol_580 = (U(IX+1,IY+(-1))%v+U(IX,IY+(-1))%v
     ++U(IX,IY)%v+U(IX+1,IY)%v)
                  OpenAD_Symbol_589 = (FCORIV(IX,IY)%v*OpenAD_Symbol_580
     +)
                  OpenAD_Symbol_581 = OpenAD_Symbol_580
                  OpenAD_Symbol_583 = 1_w2f__i8
                  OpenAD_Symbol_585 = 1_w2f__i8
                  OpenAD_Symbol_587 = 1_w2f__i8
                  OpenAD_Symbol_588 = 1_w2f__i8
                  OpenAD_Symbol_586 = 1_w2f__i8
                  OpenAD_Symbol_584 = 1_w2f__i8
                  OpenAD_Symbol_582 = FCORIV(IX,IY)%v
                  FU%v = OpenAD_Symbol_589
                  OpenAD_Symbol_1210 = (OpenAD_Symbol_583 *
     >  OpenAD_Symbol_582)
                  OpenAD_Symbol_1212 = (OpenAD_Symbol_584 *
     >  OpenAD_Symbol_582)
                  OpenAD_Symbol_1213 = (OpenAD_Symbol_585 *
     >  OpenAD_Symbol_1212)
                  OpenAD_Symbol_1215 = (OpenAD_Symbol_586 *
     >  OpenAD_Symbol_1212)
                  OpenAD_Symbol_1216 = (OpenAD_Symbol_587 *
     >  OpenAD_Symbol_1215)
                  OpenAD_Symbol_1218 = (OpenAD_Symbol_588 *
     >  OpenAD_Symbol_1215)
                  OpenAD_Symbol_1220 = OpenAD_Symbol_581
                  CALL setderiv(OpenAD_Symbol_1221,FCORIV(IX,IY))
                  CALL setderiv(OpenAD_Symbol_1219,U(IX+1,IY))
                  CALL setderiv(OpenAD_Symbol_1217,U(IX,IY))
                  CALL setderiv(OpenAD_Symbol_1214,U(IX,IY+(-1)))
                  CALL setderiv(OpenAD_Symbol_1211,U(IX+1,IY+(-1)))
                  CALL sax(OpenAD_Symbol_1210,OpenAD_Symbol_1211,FU)
                  CALL saxpy(OpenAD_Symbol_1213,OpenAD_Symbol_1214,FU)
                  CALL saxpy(OpenAD_Symbol_1216,OpenAD_Symbol_1217,FU)
                  CALL saxpy(OpenAD_Symbol_1218,OpenAD_Symbol_1219,FU)
                  CALL saxpy(OpenAD_Symbol_1220,OpenAD_Symbol_1221,FU)
                  OpenAD_Symbol_599 = (FRICTV%v*5.0D-01)
                  OpenAD_Symbol_594 = (DT%v*OpenAD_Symbol_599+1.0D00)
                  OpenAD_Symbol_590 = (VMASK(IX,IY)%v/OpenAD_Symbol_594)
                  OpenAD_Symbol_606 = (VFORCE(IX,IY)%v*DT%v)
                  OpenAD_Symbol_620 = (FRICTV%v*5.0D-01)
                  OpenAD_Symbol_615 = (1.0D00-DT%v*OpenAD_Symbol_620)
                  OpenAD_Symbol_625 = (DT%v*9.81000000000000049738D00)
                  OpenAD_Symbol_591 = (INVHV(IX,IY)%v*OpenAD_Symbol_606+
     +V(IX,IY)%v*OpenAD_Symbol_615-GRADETAV%v*OpenAD_Symbol_625-FU%v*DT%
     +v)
                  OpenAD_Symbol_632 = (OpenAD_Symbol_590 *
     >  OpenAD_Symbol_591)
                  OpenAD_Symbol_595 = (INT(1_w2f__i8) /
     >  OpenAD_Symbol_594)
                  OpenAD_Symbol_600 = OpenAD_Symbol_599
                  OpenAD_Symbol_602 = 5.0D-01
                  OpenAD_Symbol_601 = DT%v
                  OpenAD_Symbol_597 = 1_w2f__i8
                  OpenAD_Symbol_596 = (-(VMASK(IX,IY)%v/(OpenAD_Symbol_5
     +94*OpenAD_Symbol_594)))
                  OpenAD_Symbol_592 = OpenAD_Symbol_591
                  OpenAD_Symbol_607 = OpenAD_Symbol_606
                  OpenAD_Symbol_609 = DT%v
                  OpenAD_Symbol_610 = VFORCE(IX,IY)%v
                  OpenAD_Symbol_608 = INVHV(IX,IY)%v
                  OpenAD_Symbol_604 = 1_w2f__i8
                  OpenAD_Symbol_616 = OpenAD_Symbol_615
                  OpenAD_Symbol_621 = OpenAD_Symbol_620
                  OpenAD_Symbol_623 = 5.0D-01
                  OpenAD_Symbol_622 = DT%v
                  OpenAD_Symbol_619 = (-1_w2f__i8)
                  OpenAD_Symbol_617 = V(IX,IY)%v
                  OpenAD_Symbol_613 = 1_w2f__i8
                  OpenAD_Symbol_626 = OpenAD_Symbol_625
                  OpenAD_Symbol_628 = 9.81000000000000049738D00
                  OpenAD_Symbol_627 = GRADETAV%v
                  OpenAD_Symbol_614 = (-1_w2f__i8)
                  OpenAD_Symbol_611 = 1_w2f__i8
                  OpenAD_Symbol_630 = DT%v
                  OpenAD_Symbol_631 = FU%v
                  OpenAD_Symbol_612 = (-1_w2f__i8)
                  OpenAD_Symbol_605 = 1_w2f__i8
                  OpenAD_Symbol_593 = OpenAD_Symbol_590
                  V(INT(IX),INT(IY))%v = OpenAD_Symbol_632
                  OpenAD_Symbol_1222 = (OpenAD_Symbol_604 *
     >  OpenAD_Symbol_593)
                  OpenAD_Symbol_1223 = (OpenAD_Symbol_605 *
     >  OpenAD_Symbol_593)
                  OpenAD_Symbol_1224 = (OpenAD_Symbol_611 *
     >  OpenAD_Symbol_1223)
                  OpenAD_Symbol_1225 = (OpenAD_Symbol_612 *
     >  OpenAD_Symbol_1223)
                  OpenAD_Symbol_1226 = (OpenAD_Symbol_613 *
     >  OpenAD_Symbol_1224)
                  OpenAD_Symbol_1227 = (OpenAD_Symbol_614 *
     >  OpenAD_Symbol_1224)
                  OpenAD_Symbol_1228 = (OpenAD_Symbol_616 *
     >  OpenAD_Symbol_1226)
                  OpenAD_Symbol_1230 = (OpenAD_Symbol_617 *
     >  OpenAD_Symbol_1226)
                  OpenAD_Symbol_1231 = (OpenAD_Symbol_595 *
     >  OpenAD_Symbol_592)
                  OpenAD_Symbol_1233 = (OpenAD_Symbol_596 *
     >  OpenAD_Symbol_592)
                  OpenAD_Symbol_1234 = (OpenAD_Symbol_626 *
     >  OpenAD_Symbol_1227)
                  OpenAD_Symbol_1236 = (OpenAD_Symbol_627 *
     >  OpenAD_Symbol_1227)
                  OpenAD_Symbol_1237 = (OpenAD_Symbol_607 *
     >  OpenAD_Symbol_1222)
                  OpenAD_Symbol_1239 = (OpenAD_Symbol_608 *
     >  OpenAD_Symbol_1222)
                  OpenAD_Symbol_1240 = (OpenAD_Symbol_630 *
     >  OpenAD_Symbol_1225)
                  OpenAD_Symbol_1242 = (OpenAD_Symbol_631 *
     >  OpenAD_Symbol_1225)
                  OpenAD_Symbol_1244 = (OpenAD_Symbol_609 *
     >  OpenAD_Symbol_1239)
                  OpenAD_Symbol_1246 = (OpenAD_Symbol_610 *
     >  OpenAD_Symbol_1239)
                  OpenAD_Symbol_1247 = (OpenAD_Symbol_619 *
     >  OpenAD_Symbol_1230)
                  OpenAD_Symbol_1248 = (OpenAD_Symbol_621 *
     >  OpenAD_Symbol_1247)
                  OpenAD_Symbol_1249 = (OpenAD_Symbol_622 *
     >  OpenAD_Symbol_1247)
                  OpenAD_Symbol_1250 = (OpenAD_Symbol_597 *
     >  OpenAD_Symbol_1233)
                  OpenAD_Symbol_1251 = (OpenAD_Symbol_600 *
     >  OpenAD_Symbol_1250)
                  OpenAD_Symbol_1252 = (OpenAD_Symbol_601 *
     >  OpenAD_Symbol_1250)
                  OpenAD_Symbol_1253 = (OpenAD_Symbol_628 *
     >  OpenAD_Symbol_1236)
                  OpenAD_Symbol_1254 = (OpenAD_Symbol_623 *
     >  OpenAD_Symbol_1249)
                  OpenAD_Symbol_1256 = (OpenAD_Symbol_602 *
     >  OpenAD_Symbol_1252)
                  CALL setderiv(OpenAD_Symbol_1255,FRICTV)
                  CALL setderiv(OpenAD_Symbol_1245,VFORCE(IX,IY))
                  CALL setderiv(OpenAD_Symbol_1243,DT)
                  CALL setderiv(OpenAD_Symbol_1241,FU)
                  CALL setderiv(OpenAD_Symbol_1238,INVHV(IX,IY))
                  CALL setderiv(OpenAD_Symbol_1235,GRADETAV)
                  CALL setderiv(OpenAD_Symbol_1232,VMASK(IX,IY))
                  CALL setderiv(OpenAD_Symbol_1229,V(IX,IY))
                  CALL sax(OpenAD_Symbol_1228,OpenAD_Symbol_1229,V(IX,IY
     +))
                  CALL saxpy(OpenAD_Symbol_1231,OpenAD_Symbol_1232,V(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1234,OpenAD_Symbol_1235,V(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1237,OpenAD_Symbol_1238,V(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1240,OpenAD_Symbol_1241,V(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1242,OpenAD_Symbol_1243,V(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1244,OpenAD_Symbol_1245,V(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1246,OpenAD_Symbol_1243,V(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1248,OpenAD_Symbol_1243,V(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1251,OpenAD_Symbol_1243,V(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1253,OpenAD_Symbol_1243,V(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1254,OpenAD_Symbol_1255,V(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1256,OpenAD_Symbol_1255,V(IX,
     +IY))
                END DO
              END DO
              IF(XPERIODIC) THEN
                DO IY = 0, 21, 1
                  V(0,INT(IY))%v = V(20,IY)%v
                  CALL setderiv(V(0,IY),V(20,IY))
                END DO
              ENDIF
              IF(YPERIODIC) THEN
                DO IX = 0, 21, 1
                  V(INT(IX),21)%v = V(IX,1)%v
                  CALL setderiv(V(IX,21),V(IX,1))
                END DO
              ENDIF
              DO IY = 1, 20, 1
                DO IX = 1, 20, 1
                  OpenAD_Symbol_636 = (FRICT(IX,IY)%v+FRICT(IX+(-1),IY)%
     +v)
                  OpenAD_Symbol_633 = (OpenAD_Symbol_636 * 5.0D-01)
                  OpenAD_Symbol_641 = (INVHU(IX,IY)%v*OpenAD_Symbol_633)
                  OpenAD_Symbol_634 = OpenAD_Symbol_633
                  OpenAD_Symbol_639 = 1_w2f__i8
                  OpenAD_Symbol_640 = 1_w2f__i8
                  OpenAD_Symbol_637 = 5.0D-01
                  OpenAD_Symbol_635 = INVHU(IX,IY)%v
                  FRICTU%v = OpenAD_Symbol_641
                  OpenAD_Symbol_1257 = (OpenAD_Symbol_637 *
     >  OpenAD_Symbol_635)
                  OpenAD_Symbol_1258 = (OpenAD_Symbol_639 *
     >  OpenAD_Symbol_1257)
                  OpenAD_Symbol_1260 = (OpenAD_Symbol_640 *
     >  OpenAD_Symbol_1257)
                  OpenAD_Symbol_1262 = OpenAD_Symbol_634
                  CALL setderiv(OpenAD_Symbol_1263,INVHU(IX,IY))
                  CALL setderiv(OpenAD_Symbol_1261,FRICT(IX+(-1),IY))
                  CALL setderiv(OpenAD_Symbol_1259,FRICT(IX,IY))
                  CALL sax(OpenAD_Symbol_1258,OpenAD_Symbol_1259,FRICTU)
                  CALL saxpy(OpenAD_Symbol_1260,OpenAD_Symbol_1261,FRICT
     +U)
                  CALL saxpy(OpenAD_Symbol_1262,OpenAD_Symbol_1263,FRICT
     +U)
                  OpenAD_Symbol_642 = (ETA(IX,IY)%v-ETA(IX+(-1),IY)%v)
                  OpenAD_Symbol_648 = (RX(IY)%v*5.0D-01)
                  OpenAD_Symbol_649 = (DX(IX)%v+DX(IX+(-1))%v)
                  OpenAD_Symbol_643 = (OpenAD_Symbol_648 *
     >  OpenAD_Symbol_649)
                  OpenAD_Symbol_656 = (OpenAD_Symbol_642 /
     >  OpenAD_Symbol_643)
                  OpenAD_Symbol_646 = 1_w2f__i8
                  OpenAD_Symbol_647 = (-1_w2f__i8)
                  OpenAD_Symbol_644 = (INT(1_w2f__i8) /
     >  OpenAD_Symbol_643)
                  OpenAD_Symbol_652 = 5.0D-01
                  OpenAD_Symbol_650 = OpenAD_Symbol_649
                  OpenAD_Symbol_654 = 1_w2f__i8
                  OpenAD_Symbol_655 = 1_w2f__i8
                  OpenAD_Symbol_651 = OpenAD_Symbol_648
                  OpenAD_Symbol_645 = (-(OpenAD_Symbol_642 /(
     > OpenAD_Symbol_643 * OpenAD_Symbol_643)))
                  GRADETAU%v = OpenAD_Symbol_656
                  OpenAD_Symbol_1264 = (OpenAD_Symbol_650 *
     >  OpenAD_Symbol_645)
                  OpenAD_Symbol_1265 = (OpenAD_Symbol_651 *
     >  OpenAD_Symbol_645)
                  OpenAD_Symbol_1266 = (OpenAD_Symbol_654 *
     >  OpenAD_Symbol_1265)
                  OpenAD_Symbol_1268 = (OpenAD_Symbol_655 *
     >  OpenAD_Symbol_1265)
                  OpenAD_Symbol_1270 = (OpenAD_Symbol_646 *
     >  OpenAD_Symbol_644)
                  OpenAD_Symbol_1272 = (OpenAD_Symbol_647 *
     >  OpenAD_Symbol_644)
                  OpenAD_Symbol_1274 = (OpenAD_Symbol_652 *
     >  OpenAD_Symbol_1264)
                  CALL setderiv(OpenAD_Symbol_1275,RX(IY))
                  CALL setderiv(OpenAD_Symbol_1273,ETA(IX+(-1),IY))
                  CALL setderiv(OpenAD_Symbol_1271,ETA(IX,IY))
                  CALL setderiv(OpenAD_Symbol_1269,DX(IX+(-1)))
                  CALL setderiv(OpenAD_Symbol_1267,DX(IX))
                  CALL sax(OpenAD_Symbol_1266,OpenAD_Symbol_1267,GRADETA
     +U)
                  CALL saxpy(OpenAD_Symbol_1268,OpenAD_Symbol_1269,GRADE
     +TAU)
                  CALL saxpy(OpenAD_Symbol_1270,OpenAD_Symbol_1271,GRADE
     +TAU)
                  CALL saxpy(OpenAD_Symbol_1272,OpenAD_Symbol_1273,GRADE
     +TAU)
                  CALL saxpy(OpenAD_Symbol_1274,OpenAD_Symbol_1275,GRADE
     +TAU)
                  OpenAD_Symbol_657 = (V(IX+(-1),IY+1)%v+V(IX,IY+1)%v+V(
     +IX,IY)%v+V(IX+(-1),IY)%v)
                  OpenAD_Symbol_666 = (FCORIU(IX,IY)%v*OpenAD_Symbol_657
     +)
                  OpenAD_Symbol_658 = OpenAD_Symbol_657
                  OpenAD_Symbol_660 = 1_w2f__i8
                  OpenAD_Symbol_662 = 1_w2f__i8
                  OpenAD_Symbol_664 = 1_w2f__i8
                  OpenAD_Symbol_665 = 1_w2f__i8
                  OpenAD_Symbol_663 = 1_w2f__i8
                  OpenAD_Symbol_661 = 1_w2f__i8
                  OpenAD_Symbol_659 = FCORIU(IX,IY)%v
                  FV%v = OpenAD_Symbol_666
                  OpenAD_Symbol_1276 = (OpenAD_Symbol_660 *
     >  OpenAD_Symbol_659)
                  OpenAD_Symbol_1278 = (OpenAD_Symbol_661 *
     >  OpenAD_Symbol_659)
                  OpenAD_Symbol_1279 = (OpenAD_Symbol_662 *
     >  OpenAD_Symbol_1278)
                  OpenAD_Symbol_1281 = (OpenAD_Symbol_663 *
     >  OpenAD_Symbol_1278)
                  OpenAD_Symbol_1282 = (OpenAD_Symbol_664 *
     >  OpenAD_Symbol_1281)
                  OpenAD_Symbol_1284 = (OpenAD_Symbol_665 *
     >  OpenAD_Symbol_1281)
                  OpenAD_Symbol_1286 = OpenAD_Symbol_658
                  CALL setderiv(OpenAD_Symbol_1287,FCORIU(IX,IY))
                  CALL setderiv(OpenAD_Symbol_1285,V(IX+(-1),IY))
                  CALL setderiv(OpenAD_Symbol_1283,V(IX,IY))
                  CALL setderiv(OpenAD_Symbol_1280,V(IX,IY+1))
                  CALL setderiv(OpenAD_Symbol_1277,V(IX+(-1),IY+1))
                  CALL sax(OpenAD_Symbol_1276,OpenAD_Symbol_1277,FV)
                  CALL saxpy(OpenAD_Symbol_1279,OpenAD_Symbol_1280,FV)
                  CALL saxpy(OpenAD_Symbol_1282,OpenAD_Symbol_1283,FV)
                  CALL saxpy(OpenAD_Symbol_1284,OpenAD_Symbol_1285,FV)
                  CALL saxpy(OpenAD_Symbol_1286,OpenAD_Symbol_1287,FV)
                  OpenAD_Symbol_676 = (FRICTU%v*5.0D-01)
                  OpenAD_Symbol_671 = (DT%v*OpenAD_Symbol_676+1.0D00)
                  OpenAD_Symbol_667 = (UMASK(IX,IY)%v/OpenAD_Symbol_671)
                  OpenAD_Symbol_694 = (FRICTU%v*5.0D-01)
                  OpenAD_Symbol_689 = (1.0D00-DT%v*OpenAD_Symbol_694)
                  OpenAD_Symbol_699 = (DT%v*9.81000000000000049738D00)
                  OpenAD_Symbol_704 = (UFORCE(IX,IY)%v*DT%v)
                  OpenAD_Symbol_668 = (FV%v*DT%v+U(IX,IY)%v*OpenAD_Symbo
     +l_689-GRADETAU%v*OpenAD_Symbol_699+INVHU(IX,IY)%v*OpenAD_Symbol_70
     +4)
                  OpenAD_Symbol_709 = (OpenAD_Symbol_667 *
     >  OpenAD_Symbol_668)
                  OpenAD_Symbol_672 = (INT(1_w2f__i8) /
     >  OpenAD_Symbol_671)
                  OpenAD_Symbol_677 = OpenAD_Symbol_676
                  OpenAD_Symbol_679 = 5.0D-01
                  OpenAD_Symbol_678 = DT%v
                  OpenAD_Symbol_674 = 1_w2f__i8
                  OpenAD_Symbol_673 = (-(UMASK(IX,IY)%v/(OpenAD_Symbol_6
     +71*OpenAD_Symbol_671)))
                  OpenAD_Symbol_669 = OpenAD_Symbol_668
                  OpenAD_Symbol_685 = DT%v
                  OpenAD_Symbol_686 = FV%v
                  OpenAD_Symbol_683 = 1_w2f__i8
                  OpenAD_Symbol_690 = OpenAD_Symbol_689
                  OpenAD_Symbol_695 = OpenAD_Symbol_694
                  OpenAD_Symbol_697 = 5.0D-01
                  OpenAD_Symbol_696 = DT%v
                  OpenAD_Symbol_693 = (-1_w2f__i8)
                  OpenAD_Symbol_691 = U(IX,IY)%v
                  OpenAD_Symbol_687 = 1_w2f__i8
                  OpenAD_Symbol_700 = OpenAD_Symbol_699
                  OpenAD_Symbol_702 = 9.81000000000000049738D00
                  OpenAD_Symbol_701 = GRADETAU%v
                  OpenAD_Symbol_688 = (-1_w2f__i8)
                  OpenAD_Symbol_684 = 1_w2f__i8
                  OpenAD_Symbol_681 = 1_w2f__i8
                  OpenAD_Symbol_705 = OpenAD_Symbol_704
                  OpenAD_Symbol_707 = DT%v
                  OpenAD_Symbol_708 = UFORCE(IX,IY)%v
                  OpenAD_Symbol_706 = INVHU(IX,IY)%v
                  OpenAD_Symbol_682 = 1_w2f__i8
                  OpenAD_Symbol_670 = OpenAD_Symbol_667
                  U(INT(IX),INT(IY))%v = OpenAD_Symbol_709
                  OpenAD_Symbol_1288 = (OpenAD_Symbol_681 *
     >  OpenAD_Symbol_670)
                  OpenAD_Symbol_1289 = (OpenAD_Symbol_682 *
     >  OpenAD_Symbol_670)
                  OpenAD_Symbol_1290 = (OpenAD_Symbol_683 *
     >  OpenAD_Symbol_1288)
                  OpenAD_Symbol_1291 = (OpenAD_Symbol_684 *
     >  OpenAD_Symbol_1288)
                  OpenAD_Symbol_1292 = (OpenAD_Symbol_687 *
     >  OpenAD_Symbol_1291)
                  OpenAD_Symbol_1293 = (OpenAD_Symbol_688 *
     >  OpenAD_Symbol_1291)
                  OpenAD_Symbol_1294 = (OpenAD_Symbol_690 *
     >  OpenAD_Symbol_1292)
                  OpenAD_Symbol_1296 = (OpenAD_Symbol_691 *
     >  OpenAD_Symbol_1292)
                  OpenAD_Symbol_1297 = (OpenAD_Symbol_672 *
     >  OpenAD_Symbol_669)
                  OpenAD_Symbol_1299 = (OpenAD_Symbol_673 *
     >  OpenAD_Symbol_669)
                  OpenAD_Symbol_1300 = (OpenAD_Symbol_705 *
     >  OpenAD_Symbol_1289)
                  OpenAD_Symbol_1302 = (OpenAD_Symbol_706 *
     >  OpenAD_Symbol_1289)
                  OpenAD_Symbol_1303 = (OpenAD_Symbol_700 *
     >  OpenAD_Symbol_1293)
                  OpenAD_Symbol_1305 = (OpenAD_Symbol_701 *
     >  OpenAD_Symbol_1293)
                  OpenAD_Symbol_1306 = (OpenAD_Symbol_707 *
     >  OpenAD_Symbol_1302)
                  OpenAD_Symbol_1308 = (OpenAD_Symbol_708 *
     >  OpenAD_Symbol_1302)
                  OpenAD_Symbol_1310 = (OpenAD_Symbol_685 *
     >  OpenAD_Symbol_1290)
                  OpenAD_Symbol_1312 = (OpenAD_Symbol_686 *
     >  OpenAD_Symbol_1290)
                  OpenAD_Symbol_1313 = (OpenAD_Symbol_693 *
     >  OpenAD_Symbol_1296)
                  OpenAD_Symbol_1314 = (OpenAD_Symbol_695 *
     >  OpenAD_Symbol_1313)
                  OpenAD_Symbol_1315 = (OpenAD_Symbol_696 *
     >  OpenAD_Symbol_1313)
                  OpenAD_Symbol_1316 = (OpenAD_Symbol_674 *
     >  OpenAD_Symbol_1299)
                  OpenAD_Symbol_1317 = (OpenAD_Symbol_677 *
     >  OpenAD_Symbol_1316)
                  OpenAD_Symbol_1318 = (OpenAD_Symbol_678 *
     >  OpenAD_Symbol_1316)
                  OpenAD_Symbol_1319 = (OpenAD_Symbol_702 *
     >  OpenAD_Symbol_1305)
                  OpenAD_Symbol_1320 = (OpenAD_Symbol_697 *
     >  OpenAD_Symbol_1315)
                  OpenAD_Symbol_1322 = (OpenAD_Symbol_679 *
     >  OpenAD_Symbol_1318)
                  CALL setderiv(OpenAD_Symbol_1321,FRICTU)
                  CALL setderiv(OpenAD_Symbol_1311,FV)
                  CALL setderiv(OpenAD_Symbol_1309,DT)
                  CALL setderiv(OpenAD_Symbol_1307,UFORCE(IX,IY))
                  CALL setderiv(OpenAD_Symbol_1304,GRADETAU)
                  CALL setderiv(OpenAD_Symbol_1301,INVHU(IX,IY))
                  CALL setderiv(OpenAD_Symbol_1298,UMASK(IX,IY))
                  CALL setderiv(OpenAD_Symbol_1295,U(IX,IY))
                  CALL sax(OpenAD_Symbol_1294,OpenAD_Symbol_1295,U(IX,IY
     +))
                  CALL saxpy(OpenAD_Symbol_1297,OpenAD_Symbol_1298,U(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1300,OpenAD_Symbol_1301,U(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1303,OpenAD_Symbol_1304,U(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1306,OpenAD_Symbol_1307,U(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1308,OpenAD_Symbol_1309,U(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1310,OpenAD_Symbol_1311,U(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1312,OpenAD_Symbol_1309,U(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1314,OpenAD_Symbol_1309,U(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1317,OpenAD_Symbol_1309,U(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1319,OpenAD_Symbol_1309,U(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1320,OpenAD_Symbol_1321,U(IX,
     +IY))
                  CALL saxpy(OpenAD_Symbol_1322,OpenAD_Symbol_1321,U(IX,
     +IY))
                END DO
              END DO
              IF(XPERIODIC) THEN
                DO IY = 0, 21, 1
                  U(21,INT(IY))%v = U(1,IY)%v
                  CALL setderiv(U(21,IY),U(1,IY))
                END DO
              ENDIF
              IF(YPERIODIC) THEN
                DO IX = 0, 21, 1
                  U(INT(IX),0)%v = U(IX,20)%v
                  CALL setderiv(U(IX,0),U(IX,20))
                END DO
              ENDIF
            ENDIF
            DO IY = 1, 20, 1
              DO IX = 1, 20, 1
                OpenAD_Symbol_495 = (ETAMASK(IX,IY)%v*DT%v)
                OpenAD_Symbol_503 = (HU(IX+1,IY)%v*U(IX+1,IY)%v-HU(IX,IY
     +)%v*U(IX,IY)%v)
                OpenAD_Symbol_504 = (DX(IX)%v*RX(IY)%v)
                OpenAD_Symbol_521 = (HY(IY+1)%v*HV(IX,IY+1)%v)
                OpenAD_Symbol_526 = (HY(IY)%v*HV(IX,IY)%v)
                OpenAD_Symbol_515 = (V(IX,IY+1)%v*OpenAD_Symbol_521-V(IX
     +,IY)%v*OpenAD_Symbol_526)
                OpenAD_Symbol_516 = (DY(IY)%v*RY%v)
                OpenAD_Symbol_496 = ((OpenAD_Symbol_503 /
     >  OpenAD_Symbol_504) +(OpenAD_Symbol_515 / OpenAD_Symbol_516))
                OpenAD_Symbol_533 = (ETA(IX,IY)%v-OpenAD_Symbol_495*Open
     +AD_Symbol_496)
                OpenAD_Symbol_493 = 1_w2f__i8
                OpenAD_Symbol_499 = DT%v
                OpenAD_Symbol_500 = ETAMASK(IX,IY)%v
                OpenAD_Symbol_497 = OpenAD_Symbol_496
                OpenAD_Symbol_509 = U(IX+1,IY)%v
                OpenAD_Symbol_510 = HU(IX+1,IY)%v
                OpenAD_Symbol_507 = 1_w2f__i8
                OpenAD_Symbol_511 = U(IX,IY)%v
                OpenAD_Symbol_512 = HU(IX,IY)%v
                OpenAD_Symbol_508 = (-1_w2f__i8)
                OpenAD_Symbol_505 = (INT(1_w2f__i8) / OpenAD_Symbol_504
     > )
                OpenAD_Symbol_513 = RX(IY)%v
                OpenAD_Symbol_514 = DX(IX)%v
                OpenAD_Symbol_506 = (-(OpenAD_Symbol_503 /(
     > OpenAD_Symbol_504 * OpenAD_Symbol_504)))
                OpenAD_Symbol_501 = 1_w2f__i8
                OpenAD_Symbol_522 = OpenAD_Symbol_521
                OpenAD_Symbol_524 = HV(IX,IY+1)%v
                OpenAD_Symbol_525 = HY(IY+1)%v
                OpenAD_Symbol_523 = V(IX,IY+1)%v
                OpenAD_Symbol_519 = 1_w2f__i8
                OpenAD_Symbol_527 = OpenAD_Symbol_526
                OpenAD_Symbol_529 = HV(IX,IY)%v
                OpenAD_Symbol_530 = HY(IY)%v
                OpenAD_Symbol_528 = V(IX,IY)%v
                OpenAD_Symbol_520 = (-1_w2f__i8)
                OpenAD_Symbol_517 = (INT(1_w2f__i8) / OpenAD_Symbol_516
     > )
                OpenAD_Symbol_531 = RY%v
                OpenAD_Symbol_532 = DY(IY)%v
                OpenAD_Symbol_518 = (-(OpenAD_Symbol_515 /(
     > OpenAD_Symbol_516 * OpenAD_Symbol_516)))
                OpenAD_Symbol_502 = 1_w2f__i8
                OpenAD_Symbol_498 = OpenAD_Symbol_495
                OpenAD_Symbol_494 = (-1_w2f__i8)
                ETA(INT(IX),INT(IY))%v = OpenAD_Symbol_533
                OpenAD_Symbol_1123 = (OpenAD_Symbol_497 *
     >  OpenAD_Symbol_494)
                OpenAD_Symbol_1124 = (OpenAD_Symbol_498 *
     >  OpenAD_Symbol_494)
                OpenAD_Symbol_1125 = (OpenAD_Symbol_501 *
     >  OpenAD_Symbol_1124)
                OpenAD_Symbol_1126 = (OpenAD_Symbol_502 *
     >  OpenAD_Symbol_1124)
                OpenAD_Symbol_1127 = (OpenAD_Symbol_517 *
     >  OpenAD_Symbol_1126)
                OpenAD_Symbol_1128 = (OpenAD_Symbol_518 *
     >  OpenAD_Symbol_1126)
                OpenAD_Symbol_1129 = (OpenAD_Symbol_519 *
     >  OpenAD_Symbol_1127)
                OpenAD_Symbol_1130 = (OpenAD_Symbol_520 *
     >  OpenAD_Symbol_1127)
                OpenAD_Symbol_1131 = (OpenAD_Symbol_505 *
     >  OpenAD_Symbol_1125)
                OpenAD_Symbol_1132 = (OpenAD_Symbol_506 *
     >  OpenAD_Symbol_1125)
                OpenAD_Symbol_1133 = (OpenAD_Symbol_527 *
     >  OpenAD_Symbol_1130)
                OpenAD_Symbol_1135 = (OpenAD_Symbol_528 *
     >  OpenAD_Symbol_1130)
                OpenAD_Symbol_1136 = (OpenAD_Symbol_522 *
     >  OpenAD_Symbol_1129)
                OpenAD_Symbol_1138 = (OpenAD_Symbol_523 *
     >  OpenAD_Symbol_1129)
                OpenAD_Symbol_1139 = (OpenAD_Symbol_507 *
     >  OpenAD_Symbol_1131)
                OpenAD_Symbol_1140 = (OpenAD_Symbol_508 *
     >  OpenAD_Symbol_1131)
                OpenAD_Symbol_1141 = (OpenAD_Symbol_531 *
     >  OpenAD_Symbol_1128)
                OpenAD_Symbol_1143 = (OpenAD_Symbol_532 *
     >  OpenAD_Symbol_1128)
                OpenAD_Symbol_1145 = (OpenAD_Symbol_529 *
     >  OpenAD_Symbol_1135)
                OpenAD_Symbol_1147 = (OpenAD_Symbol_530 *
     >  OpenAD_Symbol_1135)
                OpenAD_Symbol_1149 = (OpenAD_Symbol_524 *
     >  OpenAD_Symbol_1138)
                OpenAD_Symbol_1151 = (OpenAD_Symbol_525 *
     >  OpenAD_Symbol_1138)
                OpenAD_Symbol_1153 = (OpenAD_Symbol_513 *
     >  OpenAD_Symbol_1132)
                OpenAD_Symbol_1155 = (OpenAD_Symbol_514 *
     >  OpenAD_Symbol_1132)
                OpenAD_Symbol_1157 = (OpenAD_Symbol_511 *
     >  OpenAD_Symbol_1140)
                OpenAD_Symbol_1159 = (OpenAD_Symbol_512 *
     >  OpenAD_Symbol_1140)
                OpenAD_Symbol_1161 = (OpenAD_Symbol_509 *
     >  OpenAD_Symbol_1139)
                OpenAD_Symbol_1163 = (OpenAD_Symbol_510 *
     >  OpenAD_Symbol_1139)
                OpenAD_Symbol_1165 = (OpenAD_Symbol_499 *
     >  OpenAD_Symbol_1123)
                OpenAD_Symbol_1167 = (OpenAD_Symbol_500 *
     >  OpenAD_Symbol_1123)
                OpenAD_Symbol_1169 = OpenAD_Symbol_493
                CALL setderiv(OpenAD_Symbol_1170,ETA(IX,IY))
                CALL setderiv(OpenAD_Symbol_1168,DT)
                CALL setderiv(OpenAD_Symbol_1166,ETAMASK(IX,IY))
                CALL setderiv(OpenAD_Symbol_1164,U(IX+1,IY))
                CALL setderiv(OpenAD_Symbol_1162,HU(IX+1,IY))
                CALL setderiv(OpenAD_Symbol_1160,U(IX,IY))
                CALL setderiv(OpenAD_Symbol_1158,HU(IX,IY))
                CALL setderiv(OpenAD_Symbol_1156,RX(IY))
                CALL setderiv(OpenAD_Symbol_1154,DX(IX))
                CALL setderiv(OpenAD_Symbol_1152,HV(IX,IY+1))
                CALL setderiv(OpenAD_Symbol_1150,HY(IY+1))
                CALL setderiv(OpenAD_Symbol_1148,HV(IX,IY))
                CALL setderiv(OpenAD_Symbol_1146,HY(IY))
                CALL setderiv(OpenAD_Symbol_1144,RY)
                CALL setderiv(OpenAD_Symbol_1142,DY(IY))
                CALL setderiv(OpenAD_Symbol_1137,V(IX,IY+1))
                CALL setderiv(OpenAD_Symbol_1134,V(IX,IY))
                CALL sax(OpenAD_Symbol_1133,OpenAD_Symbol_1134,ETA(IX,IY
     +))
                CALL saxpy(OpenAD_Symbol_1136,OpenAD_Symbol_1137,ETA(IX,
     +IY))
                CALL saxpy(OpenAD_Symbol_1141,OpenAD_Symbol_1142,ETA(IX,
     +IY))
                CALL saxpy(OpenAD_Symbol_1143,OpenAD_Symbol_1144,ETA(IX,
     +IY))
                CALL saxpy(OpenAD_Symbol_1145,OpenAD_Symbol_1146,ETA(IX,
     +IY))
                CALL saxpy(OpenAD_Symbol_1147,OpenAD_Symbol_1148,ETA(IX,
     +IY))
                CALL saxpy(OpenAD_Symbol_1149,OpenAD_Symbol_1150,ETA(IX,
     +IY))
                CALL saxpy(OpenAD_Symbol_1151,OpenAD_Symbol_1152,ETA(IX,
     +IY))
                CALL saxpy(OpenAD_Symbol_1153,OpenAD_Symbol_1154,ETA(IX,
     +IY))
                CALL saxpy(OpenAD_Symbol_1155,OpenAD_Symbol_1156,ETA(IX,
     +IY))
                CALL saxpy(OpenAD_Symbol_1157,OpenAD_Symbol_1158,ETA(IX,
     +IY))
                CALL saxpy(OpenAD_Symbol_1159,OpenAD_Symbol_1160,ETA(IX,
     +IY))
                CALL saxpy(OpenAD_Symbol_1161,OpenAD_Symbol_1162,ETA(IX,
     +IY))
                CALL saxpy(OpenAD_Symbol_1163,OpenAD_Symbol_1164,ETA(IX,
     +IY))
                CALL saxpy(OpenAD_Symbol_1165,OpenAD_Symbol_1166,ETA(IX,
     +IY))
                CALL saxpy(OpenAD_Symbol_1167,OpenAD_Symbol_1168,ETA(IX,
     +IY))
                CALL saxpy(OpenAD_Symbol_1169,OpenAD_Symbol_1170,ETA(IX,
     +IY))
              END DO
            END DO
            IF(XPERIODIC) THEN
              DO IY = 0, 21, 1
                ETA(0,INT(IY))%v = ETA(20,IY)%v
                CALL setderiv(ETA(0,IY),ETA(20,IY))
              END DO
            ENDIF
            IF(YPERIODIC) THEN
              DO IX = 0, 21, 1
                ETA(INT(IX),0)%v = ETA(IX,20)%v
                CALL setderiv(ETA(IX,0),ETA(IX,20))
              END DO
            ENDIF
            IF((TIME_INDEX .GT. NTSPINUP) .AND. CALC_COST) THEN
              CALL is_eta_data_time(TIME,TESTRESULT)
              IF(TESTRESULT) THEN
              ENDIF
              CALL is_eta_data_time(TIME,TESTRESULT)
              IF((NEDT .eq. INT((-1_w2f__i8))) .OR. TESTRESULT) THEN
                IX = 6
                ZONAL_TRANSPORT%v = 0.0D00
                CALL zero_deriv(ZONAL_TRANSPORT)
                DO IY = 1, 20, 1
                  OpenAD_Symbol_536 = (DY(IY)%v*U(IX,IY)%v)
                  OpenAD_Symbol_541 = (ZONAL_TRANSPORT%v+HU(IX,IY)%v*Ope
     +nAD_Symbol_536)
                  OpenAD_Symbol_534 = 1_w2f__i8
                  OpenAD_Symbol_537 = OpenAD_Symbol_536
                  OpenAD_Symbol_539 = U(IX,IY)%v
                  OpenAD_Symbol_540 = DY(IY)%v
                  OpenAD_Symbol_538 = HU(IX,IY)%v
                  OpenAD_Symbol_535 = 1_w2f__i8
                  ZONAL_TRANSPORT%v = OpenAD_Symbol_541
                  OpenAD_Symbol_1171 = (OpenAD_Symbol_537 *
     >  OpenAD_Symbol_535)
                  OpenAD_Symbol_1173 = (OpenAD_Symbol_538 *
     >  OpenAD_Symbol_535)
                  OpenAD_Symbol_1174 = (OpenAD_Symbol_539 *
     >  OpenAD_Symbol_1173)
                  OpenAD_Symbol_1176 = (OpenAD_Symbol_540 *
     >  OpenAD_Symbol_1173)
                  OpenAD_Symbol_1178 = OpenAD_Symbol_534
                  CALL setderiv(OpenAD_Symbol_1179,ZONAL_TRANSPORT)
                  CALL setderiv(OpenAD_Symbol_1177,U(IX,IY))
                  CALL setderiv(OpenAD_Symbol_1175,DY(IY))
                  CALL setderiv(OpenAD_Symbol_1172,HU(IX,IY))
                  CALL sax(OpenAD_Symbol_1171,OpenAD_Symbol_1172,ZONAL_T
     +RANSPORT)
                  CALL saxpy(OpenAD_Symbol_1174,OpenAD_Symbol_1175,ZONAL
     +_TRANSPORT)
                  CALL saxpy(OpenAD_Symbol_1176,OpenAD_Symbol_1177,ZONAL
     +_TRANSPORT)
                  CALL saxpy(OpenAD_Symbol_1178,OpenAD_Symbol_1179,ZONAL
     +_TRANSPORT)
                END DO
                OpenAD_Symbol_550 = (ZONAL_TRANSPORT%v-ZONAL_TRANSPORT_D
     +ATA%v)
                OpenAD_Symbol_547 = (OpenAD_Symbol_550 ** INT(2_w2f__i8
     > ))
                OpenAD_Symbol_544 = (OpenAD_Symbol_547 * 5.0D-01)
                OpenAD_Symbol_555 = (COST%v+WEIGHT_ZONAL_TRANSPORT%v*Ope
     +nAD_Symbol_544)
                OpenAD_Symbol_542 = 1_w2f__i8
                OpenAD_Symbol_545 = OpenAD_Symbol_544
                OpenAD_Symbol_553 = 1_w2f__i8
                OpenAD_Symbol_554 = (-1_w2f__i8)
                OpenAD_Symbol_551 = (INT(2_w2f__i8) *(OpenAD_Symbol_550
     >  **(INT(2_w2f__i8) - INT(1_w2f__i8))))
                OpenAD_Symbol_548 = 5.0D-01
                OpenAD_Symbol_546 = WEIGHT_ZONAL_TRANSPORT%v
                OpenAD_Symbol_543 = 1_w2f__i8
                COST%v = OpenAD_Symbol_555
                OpenAD_Symbol_1180 = (OpenAD_Symbol_545 *
     >  OpenAD_Symbol_543)
                OpenAD_Symbol_1182 = (OpenAD_Symbol_546 *
     >  OpenAD_Symbol_543)
                OpenAD_Symbol_1183 = (OpenAD_Symbol_548 *
     >  OpenAD_Symbol_1182)
                OpenAD_Symbol_1184 = (OpenAD_Symbol_551 *
     >  OpenAD_Symbol_1183)
                OpenAD_Symbol_1185 = (OpenAD_Symbol_553 *
     >  OpenAD_Symbol_1184)
                OpenAD_Symbol_1187 = (OpenAD_Symbol_554 *
     >  OpenAD_Symbol_1184)
                OpenAD_Symbol_1189 = OpenAD_Symbol_542
                CALL setderiv(OpenAD_Symbol_1190,COST)
                CALL setderiv(OpenAD_Symbol_1188,ZONAL_TRANSPORT_DATA)
                CALL setderiv(OpenAD_Symbol_1186,ZONAL_TRANSPORT)
                CALL setderiv(OpenAD_Symbol_1181,WEIGHT_ZONAL_TRANSPORT)
                CALL sax(OpenAD_Symbol_1180,OpenAD_Symbol_1181,COST)
                CALL saxpy(OpenAD_Symbol_1185,OpenAD_Symbol_1186,COST)
                CALL saxpy(OpenAD_Symbol_1187,OpenAD_Symbol_1188,COST)
                CALL saxpy(OpenAD_Symbol_1189,OpenAD_Symbol_1190,COST)
                DO IY = 1, 20, 1
                  DO IX = 1, 20, 1
                  END DO
                END DO
              ENDIF
            ENDIF
            IF ((INT(MOD(DT%v*REAL(TIME_INDEX),DT_DUMP%v)) .eq. 0.0D00) 
     +.AND. (FULLIO .AND. ( .NOT. SUPPRESSIO))) THEN
              NIO = NIO + 1
              WRITE(*, *) 'Writing Time Step ', TIME_INDEX
            ENDIF
          ENDIF
        END DO
      END DO
      ZONAL_TRANSPORT%v = 0.0D00
      CALL zero_deriv(ZONAL_TRANSPORT)
      IX = 6
      ZONAL_TRANSPORT%v = 0.0D00
      CALL zero_deriv(ZONAL_TRANSPORT)
      DO IY = 1, 20, 1
        OpenAD_Symbol_712 = (DY(IY)%v*U(IX,IY)%v)
        OpenAD_Symbol_717 = (ZONAL_TRANSPORT%v+HU(IX,IY)%v*OpenAD_Symbol
     +_712)
        OpenAD_Symbol_710 = 1_w2f__i8
        OpenAD_Symbol_713 = OpenAD_Symbol_712
        OpenAD_Symbol_715 = U(IX,IY)%v
        OpenAD_Symbol_716 = DY(IY)%v
        OpenAD_Symbol_714 = HU(IX,IY)%v
        OpenAD_Symbol_711 = 1_w2f__i8
        ZONAL_TRANSPORT%v = OpenAD_Symbol_717
        OpenAD_Symbol_1323 = (OpenAD_Symbol_713 * OpenAD_Symbol_711)
        OpenAD_Symbol_1325 = (OpenAD_Symbol_714 * OpenAD_Symbol_711)
        OpenAD_Symbol_1326 = (OpenAD_Symbol_715 * OpenAD_Symbol_1325)
        OpenAD_Symbol_1328 = (OpenAD_Symbol_716 * OpenAD_Symbol_1325)
        OpenAD_Symbol_1330 = OpenAD_Symbol_710
        CALL setderiv(OpenAD_Symbol_1331,ZONAL_TRANSPORT)
        CALL setderiv(OpenAD_Symbol_1329,U(IX,IY))
        CALL setderiv(OpenAD_Symbol_1327,DY(IY))
        CALL setderiv(OpenAD_Symbol_1324,HU(IX,IY))
        CALL sax(OpenAD_Symbol_1323,OpenAD_Symbol_1324,ZONAL_TRANSPORT)
        CALL saxpy(OpenAD_Symbol_1326,OpenAD_Symbol_1327,ZONAL_TRANSPORT
     +)
        CALL saxpy(OpenAD_Symbol_1328,OpenAD_Symbol_1329,ZONAL_TRANSPORT
     +)
        CALL saxpy(OpenAD_Symbol_1330,OpenAD_Symbol_1331,ZONAL_TRANSPORT
     +)
      END DO
      WRITE(*,*)'zonal volume transport = ',(ZONAL_TRANSPORT%v*9.9999999
     +748E-07),' Sv'
      COST_FINAL%v = ZONAL_TRANSPORT%v
      CALL setderiv(COST_FINAL,ZONAL_TRANSPORT)
C     open(10,file='cost.txt',form='formatted',position='append')
      OPEN(UNIT = 10, POSITION = 'APPEND', FORM = 'FORMATTED', FILE =
     >  'cost.txt')
      WRITE(10,'(I5,5E15.8)') ITERATION,COST_D%v,COST_SD%v,COST_GD%v,COS
     +T%v,COST_FINAL%v
C     close(10)
      CLOSE(UNIT = 10)
      ITERATION = ITERATION + 1
      RETURN
      END SUBROUTINE

Driver Code

      program shallow_water

      use active_module

c this module is extracted as adsize from head.* and renamed      
      use adsize_OpenAD

      implicit none

      type(active) cost
      real myzero 
      integer i,j

      print *, 'inifields:'

        call inifields
        print *, 'readparms:'
        call readparms
        cost%v = 0.
        print *, 'forward_model:'
        call make_weights
c
c     for time dependent data this should be done in time stepping!
c     

        myzero = 0.
        call read_eta_data( myzero )

        call length_of_control_vector( nc )


        print *, 'calculate intial gradient of cost function'
        call map_to_control_vector( nc, xc )
c
c #############

      do i=1,nc
        do j=1,nc
          if (j==i) then
            xc(j)%d(i)=1.
          else
            xc(j)%d(i)=0.
          end if
        end do
      end do
        call forward_model( nc, xc, cost )
      do i=1,nc
        print*, "grad(", i, ")=", cost%d(i) 
      end do


      print *, 'cost function = ', cost%v
c #############


cph(
c      call gradient_check( nc, xc, adxc, cost )
c      print *, 'suppress adjoint_calculations for now'
cph)

      print *,'normal in shallow_water'
      stop 'normal in shallow_water'

      end                       !program shallow_water