Back to home page

MITgcm

 
 

    


File indexing completed on 2018-03-02 18:42:52 UTC

view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
681c968868 Jean*0001       SUBROUTINE openad_checkpointinit(uCheckLev1,
                0002      +     uCheckLev2,
5dddee4ea2 Jean*0003      +     uCheckLev3,
                0004      +     uCheckLev4 )
                0005 
                0006       IMPLICIT NONE
                0007 
                0008 #include "SIZE.h"
                0009 #include "EEPARAMS.h"
                0010 #include "PARAMS.h"
                0011 
                0012       integer iloop
                0013       logical haveRemainder, allStepsCovered
                0014       integer  uCheckLev1, uCheckLev2, uCheckLev3,uCheckLev4
                0015       integer  nCheckLev1, nCheckLev2, nCheckLev3,nCheckLev4
                0016 
                0017       uCheckLev1=0
                0018       uCheckLev2=0
                0019       uCheckLev3=0
                0020       uCheckLev4=0
                0021 
                0022       open(2,action='read',file='ncheckLev.conf')
681c968868 Jean*0023       read(2,'(I5,/,I5,/I5,/I5)') nCheckLev1, nCheckLev2, nCheckLev3,
5dddee4ea2 Jean*0024      +nCheckLev4
                0025       close(2)
                0026 
681c968868 Jean*0027       write(standardmessageunit,'(A,I4,A,I4,A,I4,A,I8)')
549e1e124a Jean*0028      +'OAD: the_main_loop checkpoints allowed 1st:' ,nCheckLev1,
5dddee4ea2 Jean*0029      +', 2nd:', nCheckLev2,
                0030      +', 3rd:', nCheckLev3,
                0031      +', 4th:', nCheckLev4
                0032 
681c968868 Jean*0033 cju in this current scheme
5dddee4ea2 Jean*0034 cju there is no point in  specifying 1 as the number of checkpoints
681c968868 Jean*0035 cju because for now don't avoid the incidental store of
                0036 cju the same checkpoint across multiple levels.
                0037       if (nCheckLev4 .eq. 1 ) then
5dddee4ea2 Jean*0038          uCheckLev4=0
681c968868 Jean*0039          write(standardmessageunit,'(A)')
549e1e124a Jean*0040      +'OAD: NOTE: resetting level 4 to 0'
5dddee4ea2 Jean*0041       else
                0042          uCheckLev4=nCheckLev4
                0043       end if
681c968868 Jean*0044       if (nCheckLev3 .eq. 1 ) then
5dddee4ea2 Jean*0045          uCheckLev3=0
681c968868 Jean*0046          write(standardmessageunit,'(A)')
549e1e124a Jean*0047      +'OAD: NOTE: resetting level 3 to 0'
5dddee4ea2 Jean*0048       else
                0049          uCheckLev3=nCheckLev3
                0050       end if
681c968868 Jean*0051       if (nCheckLev2 .eq. 1 ) then
5dddee4ea2 Jean*0052          uCheckLev2=0
681c968868 Jean*0053          write(standardmessageunit,'(A)')
549e1e124a Jean*0054      +'OAD: NOTE: resetting level 2 to 0'
5dddee4ea2 Jean*0055       else
                0056          uCheckLev2=nCheckLev2
                0057       end if
681c968868 Jean*0058       if (nCheckLev1 .eq. 1 ) then
5dddee4ea2 Jean*0059          uCheckLev1=0
681c968868 Jean*0060          write(standardmessageunit,'(A)')
549e1e124a Jean*0061      +'OAD: NOTE: resetting level 1 to 0'
5dddee4ea2 Jean*0062       else
                0063          uCheckLev1=nCheckLev1
                0064       end if
                0065 cju check sanity
681c968868 Jean*0066       if (uCheckLev4 .gt. 0 ) then
                0067         if ( uCheckLev3*uCheckLev2*uCheckLev1 .eq. 0) then
                0068            write(errormessageunit,'(A)')
549e1e124a Jean*0069      +'OAD: ERROR: uCheckLev4 > 0 implies ',
5dddee4ea2 Jean*0070      +'all lower levels must be nonzero too.'
                0071         end if
                0072       end if
681c968868 Jean*0073       if (uCheckLev3 .gt. 0 ) then
                0074         if ( uCheckLev2*uCheckLev1 .eq. 0) then
                0075            write(errormessageunit,'(A)')
549e1e124a Jean*0076      +'OAD: ERROR: uCheckLev3 > 0 implies ',
5dddee4ea2 Jean*0077      +'all lower levels must be nonzero too.'
                0078         end if
                0079       end if
681c968868 Jean*0080       if (uCheckLev2 .gt. 0 ) then
                0081         if ( uCheckLev1 .eq. 0) then
                0082            write(errormessageunit,'(A)')
549e1e124a Jean*0083      +'OAD: ERROR: uCheckLev2 > 0 implies ',
5dddee4ea2 Jean*0084      +'all lower levels must be nonzero too.'
                0085         end if
                0086       end if
681c968868 Jean*0087       if (uCheckLev1 .eq. 0 ) then
                0088          write(errormessageunit,'(A)')
549e1e124a Jean*0089      +'OAD: ERROR: uCheckLev1 must be nonzero '
5dddee4ea2 Jean*0090       end if
681c968868 Jean*0091 
5dddee4ea2 Jean*0092 cju uCheckLev1
                0093       allStepsCovered = .false.
681c968868 Jean*0094       if (nTimeSteps .lt. uCheckLev1 ) then
5dddee4ea2 Jean*0095          uCheckLev1=nTimeSteps
                0096          allStepsCovered =.true.
                0097       end if
                0098 
                0099 cju uCheckLev2
681c968868 Jean*0100       if (.NOT. allStepsCovered )  then
                0101          if (MOD(nTimeSteps,uCheckLev1).gt.0)  then
                0102             if((nTimeSteps/uCheckLev1)+1 .le. uCheckLev2 ) then
5dddee4ea2 Jean*0103                uCheckLev2=(nTimeSteps/uCheckLev1)+1
                0104                allStepsCovered =.true.
                0105             end if
                0106          else
681c968868 Jean*0107             if((nTimeSteps/uCheckLev1) .le. uCheckLev2 ) then
5dddee4ea2 Jean*0108                uCheckLev2=(nTimeSteps/uCheckLev1)
                0109                allStepsCovered =.true.
                0110             end if
                0111          end if
                0112       else
681c968868 Jean*0113          uCheckLev2 = 0
5dddee4ea2 Jean*0114       end if
                0115 
                0116 cju uCheckLev3
681c968868 Jean*0117       if (.NOT. allStepsCovered )  then
                0118          if (MOD(nTimeSteps,uCheckLev1*uCheckLev2).gt.0)  then
                0119             if((nTimeSteps/(uCheckLev1*uCheckLev2))+1
                0120      +           .le. uCheckLev3 ) then
5dddee4ea2 Jean*0121                uCheckLev3=(nTimeSteps/(uCheckLev1*uCheckLev2))+1
                0122                allStepsCovered =.true.
                0123             end if
                0124          else
                0125            if((nTimeSteps/(uCheckLev1*uCheckLev2)) .le. uCheckLev3 )then
                0126                uCheckLev3=(nTimeSteps/(uCheckLev1*uCheckLev2))
                0127                allStepsCovered =.true.
                0128             end if
                0129          end if
                0130       else
681c968868 Jean*0131          uCheckLev3 = 0
5dddee4ea2 Jean*0132       end if
                0133 
                0134 cju uCheckLev4
681c968868 Jean*0135       if (.NOT. allStepsCovered )  then
5dddee4ea2 Jean*0136          if (MOD(nTimeSteps,uCheckLev1*uCheckLev2*uCheckLev3)
681c968868 Jean*0137      +        .gt.0)  then
                0138             if((nTimeSteps/(uCheckLev1*uCheckLev2*uCheckLev3))+1
                0139      +           .le. uCheckLev4 ) then
5dddee4ea2 Jean*0140                uCheckLev4=
                0141      +              (nTimeSteps/(uCheckLev1*uCheckLev2*uCheckLev3))+1
                0142                allStepsCovered =.true.
                0143             end if
                0144          else
681c968868 Jean*0145             if((nTimeSteps/(uCheckLev1*uCheckLev2*uCheckLev3))
                0146      +           .le. uCheckLev4 ) then
5dddee4ea2 Jean*0147                uCheckLev4=
                0148      +              (nTimeSteps/(uCheckLev1*uCheckLev2*uCheckLev3))
                0149                allStepsCovered =.true.
                0150             end if
                0151          end if
                0152       else
681c968868 Jean*0153          uCheckLev4 = 0
5dddee4ea2 Jean*0154       end if
                0155 
681c968868 Jean*0156       if (.NOT. allStepsCovered) then
                0157          write(errormessageunit,'(A)')
549e1e124a Jean*0158      +'OAD: ERROR: not enough checkpoints allowed'
5dddee4ea2 Jean*0159       end if
                0160 
681c968868 Jean*0161       write(standardmessageunit,'(A,I6)')
549e1e124a Jean*0162      +'OAD: timesteps required:',ntimesteps
681c968868 Jean*0163       write(standardmessageunit,'(4(A,I4))')
549e1e124a Jean*0164      +'OAD: the_main_loop checkpoints used    1st:',uCheckLev1,
5dddee4ea2 Jean*0165      +', 2nd:', uCheckLev2,
                0166      +', 3rd:', uCheckLev3,
                0167      +', 4th:', uCheckLev4
                0168 
                0169       END
                0170