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
5dddee4ea2 Jean*0034
681c968868 Jean*0035
0036
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
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
0093 allStepsCovered = .false.
681c968868 Jean*0094 if (nTimeSteps .lt. uCheckLev1 ) then
5dddee4ea2 Jean*0095 uCheckLev1=nTimeSteps
0096 allStepsCovered =.true.
0097 end if
0098
0099
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
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
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