Back to home page

darwin3

 
 

    


File indexing completed on 2025-10-27 12:19:56 UTC

view on githubraw file Latest commit 45756050 on 2025-10-24 18:16:22 UTC
a9bb88678f Jean*0001 #include "PACKAGES_CONFIG.h"
                0002 #include "CPP_OPTIONS.h"
517dbdc414 Jean*0003 #ifdef ALLOW_AUTODIFF
                0004 # include "AUTODIFF_OPTIONS.h"
                0005 #endif
                0006 #ifdef ALLOW_COST
                0007 # include "COST_OPTIONS.h"
                0008 #endif
                0009 #ifdef ALLOW_CTRL
                0010 # include "CTRL_OPTIONS.h"
                0011 #endif
                0012 #ifdef ALLOW_EXF
                0013 # include "EXF_OPTIONS.h"
                0014 #endif
a9bb88678f Jean*0015 
                0016 CBOP
                0017 C     !ROUTINE: LOAD_FIELDS_DRIVER
                0018 C     !INTERFACE:
                0019       SUBROUTINE LOAD_FIELDS_DRIVER( myTime, myIter, myThid )
                0020 
                0021 C     !DESCRIPTION: \bv
                0022 C     *==================================================================
                0023 C     | SUBROUTINE LOAD_FIELDS_DRIVER
                0024 C     | o Load external forcing fields from file
                0025 C     *==================================================================
                0026 C     *==================================================================
                0027 C     \ev
                0028 
                0029 C     !CALLING SEQUENCE:
                0030 C     LOAD_FIELDS_DRIVER
                0031 C       |
5991c9a6ad Jean*0032 C       |-- CONVERT_CT2PT  (TEOS10 case)
                0033 C       |
                0034 C       |-- CTRL_MAP_GENTIM2D
                0035 C       |
a9bb88678f Jean*0036 C       |-- BULKF_FIELDS_LOAD
                0037 C       |
                0038 C       |-- EXF_GETFORCING
                0039 C       |
b4c132448c Jean*0040 C       |-- CHEAPAML_FIELDS_LOAD
                0041 C       |
a9bb88678f Jean*0042 C       |-- EXTERNAL_FIELDS_LOAD
                0043 C       |
87dd4f7d5f Oliv*0044 C       |-- OASIM_FIELDS_LOAD
                0045 C       |
b55e95f1ff Oliv*0046 C       |-- RADTRANS_FIELDS_LOAD
                0047 C       |
a9bb88678f Jean*0048 C       |-- GCHEM_FIELDS_LOAD
                0049 C       |
                0050 C       |-- RBCS_FIELDS_LOAD
                0051 C       |
                0052 C       |-- AIM_FIELDS_LOAD
                0053 
                0054 C     !USES:
                0055       IMPLICIT NONE
                0056 C     == Global variables ==
                0057 #include "SIZE.h"
                0058 #include "EEPARAMS.h"
                0059 #include "PARAMS.h"
701e10a905 Mart*0060 #include "GRID.h"
43e432aa51 Jean*0061 #include "FFIELDS.h"
701e10a905 Mart*0062 #include "DYNVARS.h"
a9bb88678f Jean*0063 
517dbdc414 Jean*0064 #ifdef ALLOW_AUTODIFF
7c50f07931 Mart*0065 # ifdef ALLOW_AUTODIFF_TAMC
                0066 #  include "tamc.h"
                0067 # endif
cfdbfa0351 Gael*0068 # ifdef ALLOW_CTRL
                0069 #  include "CTRL_SIZE.h"
4d72283393 Mart*0070 #  include "CTRL.h"
9c41af81f6 Timo*0071 #  include "CTRL_GENARR.h"
edcd27be69 Mart*0072 #  include "CTRL_DUMMY.h"
cfdbfa0351 Gael*0073 # endif
                0074 # ifdef ALLOW_COST
                0075 #  include "cost.h"
                0076 # endif
a9bb88678f Jean*0077 # include "EOS.h"
                0078 # ifdef ALLOW_EXF
798a745844 Jean*0079 #  include "EXF_FIELDS.h"
517dbdc414 Jean*0080 #  include "EXF_CONSTANTS.h"
b4daa24319 Shre*0081 #  ifdef ALLOW_TAPENADE
                0082 #   include "EXF_PARAM.h"
                0083 #   include "EXF_INTERP_SIZE.h"
                0084 #   include "EXF_INTERP_PARAM.h"
                0085 #  endif
a9bb88678f Jean*0086 # endif
517dbdc414 Jean*0087 #endif /* ALLOW_AUTODIFF */
a9bb88678f Jean*0088 
b4c132448c Jean*0089 C     !INPUT/OUTPUT PARAMETERS:
a9bb88678f Jean*0090 C     myTime :: time counter for this thread
                0091 C     myIter :: iteration counter for this thread
                0092 C     myThid :: thread number for this instance of the routine.
                0093       _RL     myTime
                0094       INTEGER myIter
                0095       INTEGER myThid
                0096 
701e10a905 Mart*0097       _RL consTemp_to_poTemp
                0098       EXTERNAL consTemp_to_poTemp
                0099 
b4c132448c Jean*0100 C     !LOCAL VARIABLES:
43e432aa51 Jean*0101 #if (defined ALLOW_ADDFLUID) || (defined ALLOW_FRICTION_HEATING)
701e10a905 Mart*0102       INTEGER k
43e432aa51 Jean*0103 #endif
701e10a905 Mart*0104       INTEGER ks
                0105       INTEGER i,j,bi,bj
a9bb88678f Jean*0106 CEOP
                0107 
                0108 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*0109       IF (debugMode) CALL DEBUG_ENTER( 'LOAD_FIELDS_DRIVER', myThid )
a9bb88678f Jean*0110 #endif
                0111 
43e432aa51 Jean*0112 C--   Initialise forcing arrays that may receive multiple contributions
                0113 #ifdef ALLOW_ADDFLUID
79b5d5775c Jean*0114 C-- 3 cases: a) prescribe constant 3-D field "addMass" (loaded from addMassFile)
                0115 C            b) prescribe time-variable 3-D field "addMass" (not yet coded)
                0116 C            c) compute "addMass" at each time-step (sum of contrib from pkgs)
                0117 C-  Note: Condition below might need an update once (b) is made available
f4d71cd088 Jean*0118       IF ( selectAddFluid.NE.0 .AND. addMassFile.EQ.' ' ) THEN
43e432aa51 Jean*0119         DO bj=myByLo(myThid),myByHi(myThid)
                0120          DO bi=myBxLo(myThid),myBxHi(myThid)
                0121           DO k=1,Nr
                0122            DO j=1-OLy,sNy+OLy
                0123             DO i=1-OLx,sNx+OLx
                0124              addMass(i,j,k,bi,bj) =  0. _d 0
                0125             ENDDO
                0126            ENDDO
                0127           ENDDO
                0128          ENDDO
                0129         ENDDO
                0130       ENDIF
                0131 #endif /* ALLOW_ADDFLUID */
                0132 
                0133 #ifdef ALLOW_FRICTION_HEATING
f4d71cd088 Jean*0134       IF ( addFrictionHeating .AND. staggerTimeStep ) THEN
43e432aa51 Jean*0135         DO bj=myByLo(myThid),myByHi(myThid)
                0136          DO bi=myBxLo(myThid),myBxHi(myThid)
                0137           DO k=1,Nr
                0138            DO j=1-OLy,sNy+OLy
                0139             DO i=1-OLx,sNx+OLx
                0140              frictionHeating(i,j,k,bi,bj) = 0. _d 0
                0141             ENDDO
                0142            ENDDO
                0143           ENDDO
                0144          ENDDO
                0145         ENDDO
                0146       ENDIF
                0147 #endif /* ALLOW_FRICTION_HEATING */
                0148 
701e10a905 Mart*0149 C--   Determine surface temperature, usually just a copy of the surface
                0150 C--   level of theta, but for eosType='TEOS10', we need to convert from
                0151 C--   conservative temperature to in-situ surface temperature
                0152       IF ( usingPCoords ) THEN
                0153        ks = Nr
                0154       ELSE
                0155        ks = 1
                0156       ENDIF
                0157       IF ( fluidIsWater .AND. eosType .EQ. 'TEOS10' ) THEN
                0158         DO bj=myByLo(myThid),myByHi(myThid)
                0159          DO bi=myBxLo(myThid),myBxHi(myThid)
                0160           CALL CONVERT_CT2PT(
                0161      I         theta(1-OLx,1-OLy,ks,bi,bj),
                0162      I         salt(1-OLx,1-OLy,ks,bi,bj),
                0163      O         gcmSST(1-OLx,1-OLy,bi,bj),
                0164      I         myTime, myIter, myThid )
                0165 C     apply mask (because theta=0 will lead to gcmSST<0)
                0166           DO j=1-OLy,sNy+OLy
                0167            DO i=1-OLx,sNx+OLx
                0168             gcmSST(i,j,bi,bj) = gcmSST(i,j,bi,bj)*maskC(i,j,ks,bi,bj)
                0169            ENDDO
                0170           ENDDO
                0171          ENDDO
                0172         ENDDO
                0173 #ifdef ALLOW_AUTODIFF
                0174       ELSE
                0175 #else
                0176       ELSEIF ( fluidIsWater ) THEN
                0177 #endif
                0178         DO bj=myByLo(myThid),myByHi(myThid)
                0179          DO bi=myBxLo(myThid),myBxHi(myThid)
                0180           DO j=1-OLy,sNy+OLy
                0181            DO i=1-OLx,sNx+OLx
                0182             gcmSST(i,j,bi,bj) = theta(i,j,ks,bi,bj)
                0183            ENDDO
                0184           ENDDO
                0185          ENDDO
                0186         ENDDO
                0187       ENDIF
                0188 
d50b75bb8d Gael*0189 C--   Map generic time varying controls to xx_gentim2d
                0190 #ifdef ALLOW_CTRL
5991c9a6ad Jean*0191       IF ( useCTRL ) THEN
                0192 #ifdef ALLOW_DEBUG
                0193         IF (debugMode) CALL DEBUG_CALL('CTRL_MAP_GENTIM2D',myThid)
d50b75bb8d Gael*0194 #endif
5991c9a6ad Jean*0195         CALL CTRL_MAP_GENTIM2D( myTime, myIter, myThid )
                0196       ENDIF
                0197 #endif /* ALLOW_CTRL */
d50b75bb8d Gael*0198 
a9bb88678f Jean*0199 #ifdef ALLOW_BULK_FORCE
                0200       IF ( useBulkForce ) THEN
                0201 C--   Bulk-Formulae pkg: load all forcing fields at current time
                0202 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*0203         IF (debugMode) CALL DEBUG_CALL('BULKF_FIELDS_LOAD',myThid)
a9bb88678f Jean*0204 #endif
                0205         CALL TIMER_START('BULKF_FIELDS_LOAD  [LOAD_FLDS_DRIVER]',myThid)
                0206         CALL BULKF_FIELDS_LOAD( myTime, myIter, myThid )
                0207         CALL TIMER_STOP ('BULKF_FIELDS_LOAD  [LOAD_FLDS_DRIVER]',myThid)
                0208       ENDIF
                0209 #endif /* ALLOW_BULK_FORCE */
                0210 
                0211 C--   Call external forcing package
                0212 #ifdef ALLOW_EXF
342da43f96 Patr*0213       IF (useEXF) THEN
a9bb88678f Jean*0214 # ifdef ALLOW_DEBUG
8440e8ae5d Jean*0215         IF (debugMode) CALL DEBUG_CALL('EXF_GETFORCING',myThid)
a9bb88678f Jean*0216 # endif
                0217         CALL TIMER_START('EXF_GETFORCING     [LOAD_FLDS_DRIVER]',myThid)
                0218         CALL EXF_GETFORCING( myTime, myIter, myThid )
                0219         CALL TIMER_STOP ('EXF_GETFORCING     [LOAD_FLDS_DRIVER]',myThid)
342da43f96 Patr*0220       ENDIF
1a09ceef82 Jean*0221 #endif /* ALLOW_EXF */
                0222 
86f14fa6df Jean*0223 C--   Call external CheapAML forcing package
                0224 #ifdef ALLOW_CHEAPAML
                0225       IF ( useCheapAML  ) THEN
                0226 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*0227         IF (debugMode) CALL DEBUG_CALL('CHEAPAML_FIELDS_LOAD',myThid)
86f14fa6df Jean*0228 #endif
8440e8ae5d Jean*0229         CALL CHEAPAML_FIELDS_LOAD( myTime, myIter, myThid )
                0230       ENDIF
86f14fa6df Jean*0231 #endif /*ALLOW_CHEAPAML */
                0232 
3fb95cc0ad Jean*0233       IF ( fluidIsWater ) THEN
1a09ceef82 Jean*0234 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*0235         IF (debugMode) CALL DEBUG_CALL('EXTERNAL_FIELDS_LOAD',myThid)
1a09ceef82 Jean*0236 #endif
a9bb88678f Jean*0237         CALL TIMER_START('EXTERNAL_FLDS_LOAD [LOAD_FLDS_DRIVER]',myThid)
                0238         CALL EXTERNAL_FIELDS_LOAD( myTime, myIter, myThid )
                0239         CALL TIMER_STOP ('EXTERNAL_FLDS_LOAD [LOAD_FLDS_DRIVER]',myThid)
3fb95cc0ad Jean*0240       ENDIF
a9bb88678f Jean*0241 
87dd4f7d5f Oliv*0242 #ifdef ALLOW_OASIM
                0243       IF ( useOASIM ) THEN
                0244 #ifdef ALLOW_DEBUG
                0245         IF (debugMode) CALL DEBUG_CALL('OASIM_FIELDS_LOAD',myThid)
                0246 #endif /* ALLOW_DEBUG */
                0247         CALL TIMER_START('OASIM_FIELDS_LOAD  [LOAD_FLDS_DRIVER]',myThid)
                0248         CALL OASIM_FIELDS_LOAD( .TRUE., myTime, myIter, myThid )
                0249         CALL TIMER_STOP ('OASIM_FIELDS_LOAD  [LOAD_FLDS_DRIVER]',myThid)
                0250       ENDIF
                0251 #endif /* ALLOW_OASIM */
                0252 
b55e95f1ff Oliv*0253 #ifdef ALLOW_RADTRANS
                0254       IF ( useRADTRANS ) THEN
                0255 #ifdef ALLOW_DEBUG
                0256         IF (debugMode) CALL DEBUG_CALL('RADTRANS_FIELDS_LOAD',myThid)
                0257 #endif /* ALLOW_DEBUG */
                0258         CALL RADTRANS_FIELDS_LOAD( myTime, myIter, myThid )
                0259       ENDIF
                0260 #endif /* ALLOW_RADTRANS */
                0261 
a9bb88678f Jean*0262 #ifdef ALLOW_GCHEM
                0263       IF ( useGCHEM ) THEN
                0264 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*0265         IF (debugMode) CALL DEBUG_CALL('GCHEM_FIELDS_LOAD',myThid)
a9bb88678f Jean*0266 #endif /* ALLOW_DEBUG */
                0267         CALL GCHEM_FIELDS_LOAD( myTime, myIter, myThid )
                0268       ENDIF
                0269 #endif /* ALLOW_GCHEM */
                0270 
                0271 #ifdef ALLOW_RBCS
                0272       IF ( useRBCS ) THEN
                0273         CALL RBCS_FIELDS_LOAD( myTime, myIter, myThid )
                0274       ENDIF
                0275 #endif
                0276 
                0277 #ifdef ALLOW_AIM
                0278       IF ( useAIM ) THEN
                0279 C-     Update AIM bottom boundary data
                0280         CALL AIM_FIELDS_LOAD( myTime, myIter, myThid )
                0281       ENDIF
                0282 #endif
                0283 
701e10a905 Mart*0284 #ifdef ALLOW_DIAGNOSTICS
                0285       IF ( fluidIsWater .AND. useDiagnostics ) THEN
                0286         CALL DIAGNOSTICS_FILL( gcmSST, 'GCM_SST ',
                0287      &                               0, 1, 0, 1, 1, myThid )
                0288       ENDIF
                0289 #endif /* ALLOW_DIAGNOSTICS */
                0290 
a9bb88678f Jean*0291 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*0292       IF (debugMode) CALL DEBUG_LEAVE( 'LOAD_FIELDS_DRIVER', myThid )
a9bb88678f Jean*0293 #endif
                0294 
                0295       RETURN
                0296       END