Back to home page

MITgcm

 
 

    


File indexing completed on 2025-12-15 06:14:28 UTC

view on githubraw file Latest commit ad59256d on 2025-12-15 00:05:36 UTC
ad59256d7d aver*0001 #include "OBSFIT_OPTIONS.h"
                0002 #ifdef ALLOW_AUTODIFF
                0003 # include "AUTODIFF_OPTIONS.h"
                0004 #endif
                0005 c#ifdef ALLOW_ECCO
                0006 c# include "ECCO_OPTIONS.h"
                0007 c#endif
                0008 c#ifdef ALLOW_BLING
                0009 c# include "BLING_OPTIONS.h"
                0010 c#endif
                0011 
                0012 CBOP
                0013 C     !ROUTINE: OBSFIT_SAMPLING
                0014 
                0015 C     !INTERFACE:
                0016       SUBROUTINE OBSFIT_SAMPLING(
                0017      O                            modval_cur_out,
                0018      I                            i_cur,
                0019      I                            j_cur,
                0020      I                            k_cur,
                0021      I                            weights_cur,
                0022      I                            var_cur,
                0023      I                            file_cur,
                0024      I                            bi, bj,
                0025      I                            myTime, myIter, myThid )
                0026 
                0027 C     !DESCRIPTION:
                0028 C     ==================================================================
                0029 C     | 3D interpolation of model counterparts for ObsFit data
                0030 C     ==================================================================
                0031 
                0032 C     !USES:
                0033       IMPLICIT NONE
                0034 C     == Global variables ===
                0035 #include "SIZE.h"
                0036 #include "EEPARAMS.h"
                0037 #include "PARAMS.h"
                0038 #include "GRID.h"
                0039 #include "DYNVARS.h"
                0040 c#ifdef ALLOW_CAL
                0041 c# include "cal.h"
                0042 c#endif
                0043 c#ifdef ALLOW_ECCO
                0044 c# include "ECCO_SIZE.h"
                0045 c# include "ECCO.h"
                0046 c#endif
                0047 #ifdef ALLOW_OBSFIT
                0048 # include "OBSFIT_SIZE.h"
                0049 # include "OBSFIT.h"
                0050 #endif
                0051 c#ifdef ALLOW_PTRACERS
                0052 c# include "PTRACERS_SIZE.h"
                0053 c# include "PTRACERS_FIELDS.h"
                0054 c#endif
                0055 c#ifdef ALLOW_BLING
                0056 c# include "BLING_VARS.h"
                0057 c#endif
                0058 
                0059 C     !INPUT PARAMETERS:
                0060 C     i/j/k_cur   :: i/j/k - index arrays of model grid points
                0061 C     weights_cur :: weights array for profile data
                0062 C     var_cur     :: current variable name
                0063 C     file_cur    :: current filenumber
                0064 C     bi, bj      :: tile indices
                0065 C     myTime      :: Current time in simulation
                0066 C     myIter      :: Current iteration number in simulation
                0067 C     myThid      :: my thread ID number
                0068 #ifdef ALLOW_OBSFIT
                0069       INTEGER  i_cur(NUM_INTERP_PTS_OBS)
                0070       INTEGER  j_cur(NUM_INTERP_PTS_OBS)
                0071       INTEGER  k_cur(NUM_INTERP_PTS_OBS)
                0072       _RL      weights_cur(NUM_INTERP_PTS_OBS)
                0073 #else
                0074       INTEGER  i_cur, j_cur, k_cur
                0075       _RL      weights_cur
                0076 #endif
                0077       INTEGER  var_cur, file_cur
                0078       INTEGER  bi, bj
                0079       _RL     myTime
                0080       INTEGER myIter
                0081       INTEGER myThid
                0082 
                0083 C     !OUTPUT PARAMETERS:
                0084 C     modval_cur_out :: interpolated model data
                0085       _RL modval_cur_out
                0086 CEOP
                0087 
                0088 #ifdef ALLOW_OBSFIT
                0089 C     !LOCAL VARIABLES:
                0090       INTEGER  iq
                0091       _RL      tab_coeffs1(NUM_INTERP_PTS_OBS)
                0092       _RL      tab_coeffs3(NUM_INTERP_PTS_OBS)
                0093       _RL      weighing_pts(NUM_INTERP_PTS_OBS),weighingSUM
                0094       _RL      modval_cur, mask_cur
                0095 
                0096 C This is where sample types are assigned to model variables
                0097       weighingSUM = 0. _d 0
                0098       DO iq = 1, NUM_INTERP_PTS_OBS
                0099         IF ( var_cur.EQ.1 ) THEN
                0100          tab_coeffs1(iq) = theta(i_cur(iq),j_cur(iq),k_cur(iq),bi,bj)
                0101         ELSEIF ( var_cur.EQ.2 ) THEN
                0102          tab_coeffs1(iq) = salt(i_cur(iq),j_cur(iq),k_cur(iq),bi,bj)
                0103         ELSEIF ( var_cur.EQ.3 ) THEN
                0104          tab_coeffs1(iq) = uvel(i_cur(iq),j_cur(iq),k_cur(iq),bi,bj)
                0105         ELSEIF ( var_cur.EQ.4 ) THEN
                0106          tab_coeffs1(iq) = vvel(i_cur(iq),j_cur(iq),k_cur(iq),bi,bj)
                0107         ELSEIF ( var_cur.EQ.5 ) THEN
                0108          tab_coeffs1(iq) = etan(i_cur(iq),j_cur(iq),bi,bj)
                0109         ELSE
                0110          tab_coeffs1(iq) = 0. _d 0
                0111         ENDIF
                0112         tab_coeffs3(iq) = maskC(i_cur(iq),j_cur(iq),k_cur(iq),bi,bj)
                0113         weighing_pts(iq) = tab_coeffs3(iq)*weights_cur(iq)
                0114         weighingSUM = weighingSUM+weighing_pts(iq)
                0115       ENDDO
                0116 
                0117       IF ( weighingSUM.GT.zeroRL ) THEN
                0118         modval_cur = 0. _d 0
                0119         mask_cur = 1. _d 0
                0120         DO iq = 1, NUM_INTERP_PTS_OBS
                0121           modval_cur = modval_cur
                0122      &     +tab_coeffs1(iq)*weighing_pts(iq)/weighingSUM
                0123         ENDDO
                0124       ELSE
                0125         modval_cur = 0. _d 0
                0126         mask_cur = 0. _d 0
                0127       ENDIF
                0128 
                0129 #ifdef ALLOW_AUTODIFF_TAMC
                0130 C     This is necessary, because TAF does not recognise sample_modmask
                0131 C     as active and does not include it in the TL-version of this
                0132 C     routine leading to sample_modmask=0 and also to
                0133 C     objf_obsfit_tl=0.
                0134 C$TAF INCOMPLETE sample_modmask
                0135 #endif
                0136 
                0137       modval_cur_out = modval_cur
                0138       sample_modmask(bi,bj) = mask_cur
                0139 
                0140 #endif /* ALLOW_OBSFIT */
                0141 
                0142       RETURN
                0143       END