Back to home page

MITgcm

 
 

    


File indexing completed on 2020-04-22 05:11:27 UTC

view on githubraw file Latest commit 07e78522 on 2020-04-21 13:33:29 UTC
5ca83cd8f7 Dani*0001 #include "STREAMICE_OPTIONS.h"
                0002 
                0003 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0004 CBOP 0
                0005 C !ROUTINE: STREAMICE_CHECK
                0006 
                0007 C !INTERFACE:
                0008       SUBROUTINE STREAMICE_CHECK( myThid )
                0009 
                0010 C     !DESCRIPTION:
                0011 C     Check dependances with other packages
                0012 
                0013 C     !USES:
                0014       IMPLICIT NONE
                0015 #include "SIZE.h"
                0016 #include "GRID.h"
                0017 #include "EEPARAMS.h"
                0018 #include "PARAMS.h"
                0019 #include "STREAMICE.h"
                0020 #include "STREAMICE_CG.h"
                0021 #include "STREAMICE_BDRY.h"
                0022 
                0023 C     !INPUT PARAMETERS:
                0024       INTEGER myThid
                0025 CEOP
                0026 
                0027 #ifdef ALLOW_STREAMICE
                0028 C     !LOCAL VARIABLES:
                0029 C     msgBuf   :: Informational/error message buffer
                0030       CHARACTER*(MAX_LEN_MBUF) msgBuf
07e785229e dngo*0031 c     CHARACTER*(10) fname
                0032 c     INTEGER m,n,k
5ca83cd8f7 Dani*0033 
                0034       _BEGIN_MASTER(myThid)
                0035 
                0036        WRITE(msgBuf,'(A)') 'STREAMICE_CHECK: #define STREAMICE'
                0037        CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0038      &                     SQUEEZE_RIGHT , 1)
                0039 
07e785229e dngo*0040 #ifndef STREAMICE_COULOMB_SLIDING
                0041 
                0042       IF (STREAMICE_allow_reg_coulomb) THEN
                0043 
                0044        WRITE(msgBuf,'(A)')
                0045      &   'STREAMICE_CHECK: STREAMICE_COULOMB_SLIDING must be defined'
                0046         CALL PRINT_ERROR( msgBuf, myThid )
                0047 
                0048       ENDIF
                0049 
                0050 #endif
                0051 
                0052       IF(n_basal_friction .lt. 0.0) THEN
                0053        WRITE(msgBuf,'(A)')
                0054      &   'STREAMICE_CHECK: n_basal_friction must be nonnegative number'
                0055         CALL PRINT_ERROR( msgBuf, myThid )
                0056       ENDIF
                0057 
5ca83cd8f7 Dani*0058 C-   write out integer parameters
                0059 
217ff6d33b Jean*0060        CALL WRITE_0D_I( streamice_max_cg_iter, INDEX_NONE,
5ca83cd8f7 Dani*0061      &  ' max cg interations =',
                0062      &  ' /* user defined parameter */')
217ff6d33b Jean*0063        CALL WRITE_0D_I( streamice_max_nl_iter, INDEX_NONE,
5ca83cd8f7 Dani*0064      &  ' max nonlin interations =',
                0065      &  ' /* user defined parameter */')
217ff6d33b Jean*0066        CALL WRITE_0D_I( streamice_nstep_velocity, INDEX_NONE,
5ca83cd8f7 Dani*0067      &  ' # of timesteps per velocity solve  =',
                0068      &  ' /* user defined parameter */')
                0069 
                0070 C-   write out real parameters
                0071 
                0072        CALL WRITE_0D_RL( streamice_density, INDEX_NONE,
                0073      & ' streamice_density =', ' /* user defined parameter */')
217ff6d33b Jean*0074        CALL WRITE_0D_RL( streamice_density_ocean_avg, INDEX_NONE,
                0075      & ' streamice_density_ocean_avg =',
5ca83cd8f7 Dani*0076      & ' /* user defined parameter */')
217ff6d33b Jean*0077        CALL WRITE_0D_RL( B_glen_isothermal, INDEX_NONE,
                0078      & ' glens law stifness =',
5ca83cd8f7 Dani*0079      & ' /* user defined parameter */')
217ff6d33b Jean*0080        CALL WRITE_0D_RL( n_glen, INDEX_NONE,
                0081      & ' glens law exponent =',
5ca83cd8f7 Dani*0082      & ' /* user defined parameter */')
217ff6d33b Jean*0083        CALL WRITE_0D_RL( C_basal_fric_const, INDEX_NONE,
                0084      & ' basal trac coeff =',
5ca83cd8f7 Dani*0085      & ' /* user defined parameter */')
217ff6d33b Jean*0086        CALL WRITE_0D_RL( n_basal_friction, INDEX_NONE,
                0087      & ' basal exponent =',
5ca83cd8f7 Dani*0088      & ' /* user defined parameter */')
217ff6d33b Jean*0089        CALL WRITE_0D_RL( streamice_input_flux_unif, INDEX_NONE,
                0090      & ' uniform input flux (m^2/a) =',
5ca83cd8f7 Dani*0091      & ' /* user defined parameter */')
217ff6d33b Jean*0092        CALL WRITE_0D_RL( streamice_vel_update, INDEX_NONE,
                0093      & ' time for ice vel update (sec) =',
5ca83cd8f7 Dani*0094      & ' /* user defined parameter */')
217ff6d33b Jean*0095        CALL WRITE_0D_RL( streamice_cg_tol, INDEX_NONE,
                0096      & ' conj grad tolerance =',
5ca83cd8f7 Dani*0097      & ' /* user defined parameter */')
217ff6d33b Jean*0098        CALL WRITE_0D_RL( streamice_nonlin_tol, INDEX_NONE,
                0099      & ' ice velocity nonlinear iter tol =',
5ca83cd8f7 Dani*0100      & ' /* user defined parameter */')
217ff6d33b Jean*0101        CALL WRITE_0D_RL( shelf_max_draft, INDEX_NONE,
                0102      & ' max shelf draft for analytic init (m) =',
5ca83cd8f7 Dani*0103      & ' /* user defined parameter */')
217ff6d33b Jean*0104        CALL WRITE_0D_RL( shelf_min_draft, INDEX_NONE,
                0105      & ' min shelf draft for analytic init (m) =',
5ca83cd8f7 Dani*0106      & ' /* user defined parameter */')
217ff6d33b Jean*0107        CALL WRITE_0D_RL( shelf_edge_pos, INDEX_NONE,
                0108      & ' shelf extent for analytic init (km) =',
5ca83cd8f7 Dani*0109      & ' /* user defined parameter */')
217ff6d33b Jean*0110        CALL WRITE_0D_RL( shelf_slope_scale, INDEX_NONE,
                0111      & ' slope scale for analytic init (km) =',
5ca83cd8f7 Dani*0112      & ' /* user defined parameter */')
217ff6d33b Jean*0113        CALL WRITE_0D_RL( shelf_flat_width, INDEX_NONE,
                0114      & ' flat shelf width for analytic init (km) =',
5ca83cd8f7 Dani*0115      & ' /* user defined parameter */')
217ff6d33b Jean*0116        CALL WRITE_0D_RL( flow_dir, INDEX_NONE,
                0117      & ' flow direction for analytic init =',
5ca83cd8f7 Dani*0118      & ' /* user defined parameter */')
                0119 
217ff6d33b Jean*0120        CALL WRITE_0D_RL( min_x_noflow_NORTH, INDEX_NONE,
                0121      & ' min range on no bd for no-slip (km) =',
5ca83cd8f7 Dani*0122      & ' /* user defined parameter */')
217ff6d33b Jean*0123        CALL WRITE_0D_RL( max_x_noflow_NORTH, INDEX_NONE,
                0124      & ' max range on no bd for no-slip (km) =',
5ca83cd8f7 Dani*0125      & ' /* user defined parameter */')
217ff6d33b Jean*0126        CALL WRITE_0D_RL( min_x_noflow_SOUTH, INDEX_NONE,
                0127      & ' min range on so bd for no-slip (km) =',
5ca83cd8f7 Dani*0128      & ' /* user defined parameter */')
217ff6d33b Jean*0129        CALL WRITE_0D_RL( max_x_noflow_SOUTH, INDEX_NONE,
                0130      & ' max range on so bd for no-slip (km) =',
5ca83cd8f7 Dani*0131      & ' /* user defined parameter */')
217ff6d33b Jean*0132        CALL WRITE_0D_RL( min_y_noflow_EAST, INDEX_NONE,
                0133      & ' min range on east bd for no-slip (km) =',
5ca83cd8f7 Dani*0134      & ' /* user defined parameter */')
217ff6d33b Jean*0135        CALL WRITE_0D_RL( max_y_noflow_EAST, INDEX_NONE,
                0136      & ' max range on east bd for no-slip (km) =',
5ca83cd8f7 Dani*0137      & ' /* user defined parameter */')
217ff6d33b Jean*0138        CALL WRITE_0D_RL( min_y_noflow_WEST, INDEX_NONE,
                0139      & ' min range on west bd for no-slip (km) =',
5ca83cd8f7 Dani*0140      & ' /* user defined parameter */')
217ff6d33b Jean*0141        CALL WRITE_0D_RL( max_y_noflow_WEST, INDEX_NONE,
                0142      & ' max range on west bd for no-slip (km) =',
5ca83cd8f7 Dani*0143      & ' /* user defined parameter */')
                0144 
217ff6d33b Jean*0145        CALL WRITE_0D_RL( min_x_noStress_NORTH, INDEX_NONE,
                0146      & ' min range on no bd for no-stress (km) =',
5ca83cd8f7 Dani*0147      & ' /* user defined parameter */')
217ff6d33b Jean*0148        CALL WRITE_0D_RL( max_x_noStress_NORTH, INDEX_NONE,
                0149      & ' max range on no bd for no-stress (km) =',
5ca83cd8f7 Dani*0150      & ' /* user defined parameter */')
217ff6d33b Jean*0151        CALL WRITE_0D_RL( min_x_noStress_SOUTH, INDEX_NONE,
                0152      & ' min range on so bd for no-stress (km) =',
5ca83cd8f7 Dani*0153      & ' /* user defined parameter */')
217ff6d33b Jean*0154        CALL WRITE_0D_RL( max_x_noStress_SOUTH, INDEX_NONE,
                0155      & ' max range on so bd for no-stress (km) =',
5ca83cd8f7 Dani*0156      & ' /* user defined parameter */')
217ff6d33b Jean*0157        CALL WRITE_0D_RL( min_y_noStress_EAST, INDEX_NONE,
                0158      & ' min range on east bd for no-stress (km) =',
5ca83cd8f7 Dani*0159      & ' /* user defined parameter */')
217ff6d33b Jean*0160        CALL WRITE_0D_RL( max_y_noStress_EAST, INDEX_NONE,
                0161      & ' max range on east bd for no-stress (km) =',
5ca83cd8f7 Dani*0162      & ' /* user defined parameter */')
217ff6d33b Jean*0163        CALL WRITE_0D_RL( min_y_noStress_WEST, INDEX_NONE,
                0164      & ' min range on west bd for no-stress (km) =',
5ca83cd8f7 Dani*0165      & ' /* user defined parameter */')
217ff6d33b Jean*0166        CALL WRITE_0D_RL( max_y_noStress_WEST, INDEX_NONE,
                0167      & ' max range on west bd for no-stress (km) =',
5ca83cd8f7 Dani*0168      & ' /* user defined parameter */')
                0169 
217ff6d33b Jean*0170        CALL WRITE_0D_RL( min_x_FluxBdry_NORTH, INDEX_NONE,
                0171      & ' min range on no bd for FluxBdry (km) =',
5ca83cd8f7 Dani*0172      & ' /* user defined parameter */')
217ff6d33b Jean*0173        CALL WRITE_0D_RL( max_x_FluxBdry_NORTH, INDEX_NONE,
                0174      & ' max range on no bd for FluxBdry (km) =',
5ca83cd8f7 Dani*0175      & ' /* user defined parameter */')
217ff6d33b Jean*0176        CALL WRITE_0D_RL( min_x_FluxBdry_SOUTH, INDEX_NONE,
                0177      & ' min range on so bd for FluxBdry (km) =',
5ca83cd8f7 Dani*0178      & ' /* user defined parameter */')
217ff6d33b Jean*0179        CALL WRITE_0D_RL( max_x_FluxBdry_SOUTH, INDEX_NONE,
                0180      & ' max range on so bd for FluxBdry (km) =',
5ca83cd8f7 Dani*0181      & ' /* user defined parameter */')
217ff6d33b Jean*0182        CALL WRITE_0D_RL( min_y_FluxBdry_EAST, INDEX_NONE,
                0183      & ' min range on east bd for FluxBdry (km) =',
5ca83cd8f7 Dani*0184      & ' /* user defined parameter */')
217ff6d33b Jean*0185        CALL WRITE_0D_RL( max_y_FluxBdry_EAST, INDEX_NONE,
                0186      & ' max range on east bd for FluxBdry (km) =',
5ca83cd8f7 Dani*0187      & ' /* user defined parameter */')
217ff6d33b Jean*0188        CALL WRITE_0D_RL( min_y_FluxBdry_WEST, INDEX_NONE,
                0189      & ' min range on west bd for FluxBdry (km) =',
5ca83cd8f7 Dani*0190      & ' /* user defined parameter */')
217ff6d33b Jean*0191        CALL WRITE_0D_RL( max_y_FluxBdry_WEST, INDEX_NONE,
                0192      & ' max range on west bd for FluxBdry (km) =',
5ca83cd8f7 Dani*0193      & ' /* user defined parameter */')
                0194 
217ff6d33b Jean*0195        CALL WRITE_0D_RL( min_x_Dirich_NORTH, INDEX_NONE,
                0196      & ' min range on no bd for Dirich (km) =',
5ca83cd8f7 Dani*0197      & ' /* user defined parameter */')
217ff6d33b Jean*0198        CALL WRITE_0D_RL( max_x_Dirich_NORTH, INDEX_NONE,
                0199      & ' max range on no bd for Dirich (km) =',
5ca83cd8f7 Dani*0200      & ' /* user defined parameter */')
217ff6d33b Jean*0201        CALL WRITE_0D_RL( min_x_Dirich_SOUTH, INDEX_NONE,
                0202      & ' min range on so bd for Dirich (km) =',
5ca83cd8f7 Dani*0203      & ' /* user defined parameter */')
217ff6d33b Jean*0204        CALL WRITE_0D_RL( max_x_Dirich_SOUTH, INDEX_NONE,
                0205      & ' max range on so bd for Dirich (km) =',
5ca83cd8f7 Dani*0206      & ' /* user defined parameter */')
217ff6d33b Jean*0207        CALL WRITE_0D_RL( min_y_Dirich_EAST, INDEX_NONE,
                0208      & ' min range on east bd for Dirich (km) =',
5ca83cd8f7 Dani*0209      & ' /* user defined parameter */')
217ff6d33b Jean*0210        CALL WRITE_0D_RL( max_y_Dirich_EAST, INDEX_NONE,
                0211      & ' max range on east bd for Dirich (km) =',
5ca83cd8f7 Dani*0212      & ' /* user defined parameter */')
217ff6d33b Jean*0213        CALL WRITE_0D_RL( min_y_Dirich_WEST, INDEX_NONE,
                0214      & ' min range on west bd for Dirich (km) =',
5ca83cd8f7 Dani*0215      & ' /* user defined parameter */')
217ff6d33b Jean*0216        CALL WRITE_0D_RL( max_y_Dirich_WEST, INDEX_NONE,
                0217      & ' max range on west bd for Dirich (km) =',
5ca83cd8f7 Dani*0218      & ' /* user defined parameter */')
                0219 
217ff6d33b Jean*0220        CALL WRITE_0D_RL( min_x_CFBC_NORTH, INDEX_NONE,
                0221      & ' min range on no bd for CFBC (km) =',
5ca83cd8f7 Dani*0222      & ' /* user defined parameter */')
217ff6d33b Jean*0223        CALL WRITE_0D_RL( max_x_CFBC_NORTH, INDEX_NONE,
                0224      & ' max range on no bd for CFBC (km) =',
5ca83cd8f7 Dani*0225      & ' /* user defined parameter */')
217ff6d33b Jean*0226        CALL WRITE_0D_RL( min_x_CFBC_SOUTH, INDEX_NONE,
                0227      & ' min range on so bd for CFBC (km) =',
5ca83cd8f7 Dani*0228      & ' /* user defined parameter */')
217ff6d33b Jean*0229        CALL WRITE_0D_RL( max_x_CFBC_SOUTH, INDEX_NONE,
                0230      & ' max range on so bd for CFBC (km) =',
5ca83cd8f7 Dani*0231      & ' /* user defined parameter */')
217ff6d33b Jean*0232        CALL WRITE_0D_RL( min_y_CFBC_EAST, INDEX_NONE,
                0233      & ' min range on east bd for CFBC (km) =',
5ca83cd8f7 Dani*0234      & ' /* user defined parameter */')
217ff6d33b Jean*0235        CALL WRITE_0D_RL( max_y_CFBC_EAST, INDEX_NONE,
                0236      & ' max range on east bd for CFBC (km) =',
5ca83cd8f7 Dani*0237      & ' /* user defined parameter */')
217ff6d33b Jean*0238        CALL WRITE_0D_RL( min_y_CFBC_WEST, INDEX_NONE,
                0239      & ' min range on west bd for CFBC (km) =',
5ca83cd8f7 Dani*0240      & ' /* user defined parameter */')
217ff6d33b Jean*0241        CALL WRITE_0D_RL( max_y_CFBC_WEST, INDEX_NONE,
                0242      & ' max range on west bd for CFBC (km) =',
5ca83cd8f7 Dani*0243      & ' /* user defined parameter */')
                0244 
217ff6d33b Jean*0245        CALL WRITE_0D_RL( flux_bdry_val_NORTH, INDEX_NONE,
                0246      & ' val (m^2/a) for north flux bdry =',
5ca83cd8f7 Dani*0247      & ' /* user defined parameter */')
217ff6d33b Jean*0248        CALL WRITE_0D_RL( flux_bdry_val_SOUTH, INDEX_NONE,
                0249      & ' val (m^2/a) for south flux bdry =',
5ca83cd8f7 Dani*0250      & ' /* user defined parameter */')
217ff6d33b Jean*0251        CALL WRITE_0D_RL( flux_bdry_val_EAST, INDEX_NONE,
                0252      & ' val (m^2/a) for east flux bdry =',
5ca83cd8f7 Dani*0253      & ' /* user defined parameter */')
217ff6d33b Jean*0254        CALL WRITE_0D_RL( flux_bdry_val_WEST, INDEX_NONE,
                0255      & ' val (m^2/a) for west flux bdry =',
5ca83cd8f7 Dani*0256      & ' /* user defined parameter */')
217ff6d33b Jean*0257 
5ca83cd8f7 Dani*0258 C-   write out logical parameters
                0259 
217ff6d33b Jean*0260        CALL WRITE_0D_L( STREAMICE_dump_mdsio, INDEX_NONE,
5ca83cd8f7 Dani*0261      & ' streamice_dump_mdsio =', ' /* user defined parameter */')
217ff6d33b Jean*0262        CALL WRITE_0D_L( STREAMICE_dump_mdsio, INDEX_NONE,
5ca83cd8f7 Dani*0263      & ' streamice_dump_mdsio =', ' /* user defined parameter */')
217ff6d33b Jean*0264        CALL WRITE_0D_L( STREAMICE_dump_mnc, INDEX_NONE,
5ca83cd8f7 Dani*0265      & ' streamice_dump_mnc =', ' /* user defined parameter */')
217ff6d33b Jean*0266        CALL WRITE_0D_L( STREAMICE_tave_mnc, INDEX_NONE,
5ca83cd8f7 Dani*0267      & ' streamice_tave_mnc =', ' /* user defined parameter */')
07e785229e dngo*0268 c       CALL WRITE_0D_L( STREAMICE_GL_regularize, INDEX_NONE,
                0269 c     & ' streamice_GL_regularize =', ' /* user defined parameter */')
217ff6d33b Jean*0270        CALL WRITE_0D_L( STREAMICE_move_front, INDEX_NONE,
5ca83cd8f7 Dani*0271      & ' streamice_move_front =', ' /* user defined parameter */')
217ff6d33b Jean*0272        CALL WRITE_0D_L( STREAMICE_calve_to_mask, INDEX_NONE,
5ca83cd8f7 Dani*0273      & ' streamice_calve_to_mask =', ' /* user defined parameter */')
                0274 
                0275 C-   write out string parameters
                0276 
                0277        CALL WRITE_0D_C( STREAMICEthickInit,-1,INDEX_NONE,
                0278      & 'STREAMICEthickInit =',
                0279      & ' /* user defined parameter */')
                0280        CALL WRITE_0D_C( STREAMICEthickFile,-1,INDEX_NONE,
                0281      & 'STREAMICEthickFile =',
                0282      & ' /* user defined parameter */')
                0283        CALL WRITE_0D_C( STREAMICEcalveMaskFile,-1,INDEX_NONE,
                0284      & 'STREAMICEcalveMaskFile =',
                0285      & ' /* user defined parameter */')
                0286 
                0287 C-     Put stops here if some flags are wrongly chosen.
                0288 C-     For example, require this package to use tempStepping
                0289 
                0290       _END_MASTER(myThid)
                0291 
                0292 C    write init_thickness array to a binary file
                0293 
07e785229e dngo*0294 c        CALL WRITE_FLD_XY_RL ( "H_streamIce", "init",
                0295 c      & H_streamIce, 0, myThid )
                0296 c        CALL WRITE_FLD_XY_RL ( "area_shelf_streamice", "init",
                0297 c      & area_shelf_streamice, 0, myThid )
                0298 c        CALL WRITE_FLD_XY_RL ( "STREAMICE_hmask", "init",
                0299 c      & STREAMICE_hmask, 0, myThid )
                0300 c        CALL WRITE_FLD_XY_RL ( "base_el_streamice", "init",
                0301 c      & base_el_streamice, 0, myThid )
                0302 c        CALL WRITE_FLD_XY_RL ( "ssurf_el_streamice", "init",
                0303 c      & surf_el_streamice, 0, myThid )
                0304 
                0305 c       DO m=1,4
                0306 c        DO n=1,4
                0307 c         DO k=1,2
                0308 c          WRITE(fname,'(A,I1,A,I1,A,I1)')
                0309 c     &     "Dphi_", m, "_", n, "_", k
                0310 c          CALL WRITE_FLD_XY_RL (fname, "",
                0311 c     &     Dphi(:,:,:,:,m,n,k),0,myThid)
                0312 c         ENDDO
                0313 c        ENDDO
                0314 c       ENDDO
5ca83cd8f7 Dani*0315 
217ff6d33b Jean*0316        CALL WRITE_FLD_XY_RL ( "k1AtC_str", "out",
5ca83cd8f7 Dani*0317      & k1AtC_str, 0, myThid )
217ff6d33b Jean*0318        CALL WRITE_FLD_XY_RL ( "k2AtC_str", "out",
5ca83cd8f7 Dani*0319      & k2AtC_str, 0, myThid )
217ff6d33b Jean*0320        CALL WRITE_FLD_XY_RS ( "STREAMICE_ufacemask_bdry", "out",
5ca83cd8f7 Dani*0321      & STREAMICE_ufacemask_bdry, 0, myThid )
217ff6d33b Jean*0322        CALL WRITE_FLD_XY_RS ( "STREAMICE_vfacemask_bdry", "out",
5ca83cd8f7 Dani*0323      & STREAMICE_vfacemask_bdry, 0, myThid )
217ff6d33b Jean*0324        CALL WRITE_FLD_XY_RL ( "u_bdry_values_SI", "out",
5ca83cd8f7 Dani*0325      & u_bdry_values_SI, 0, myThid )
217ff6d33b Jean*0326        CALL WRITE_FLD_XY_RL ( "v_bdry_values_SI", "out",
5ca83cd8f7 Dani*0327      & v_bdry_values_SI, 0, myThid )
217ff6d33b Jean*0328        CALL WRITE_FLD_XY_RL ( "u_flux_bdry_SI", "out",
5ca83cd8f7 Dani*0329      & u_flux_bdry_SI, 0, myThid )
217ff6d33b Jean*0330        CALL WRITE_FLD_XY_RL ( "v_flux_bdry_SI", "out",
5ca83cd8f7 Dani*0331      & v_flux_bdry_SI, 0, myThid )
                0332 
                0333 #endif /* ALLOW_STREAMICE */
                0334 
                0335       RETURN
                0336       END