Ignore:
Timestamp:
12/16/19 14:33:26 (4 years ago)
Author:
jgipsl
Message:

Following changes have been done by A.Jornet/LSCE. No change is results and no change in usage have been seen. Some more error checking might stop the model for example if dimensions are not correct in call to histcom module.

Restcom:

  • Define a new var size length (20 to 100 )→ pbs found without no errors
  • Raise an error when var name is too long
  • Deallocate any buffer at the end of all restput/restcget calls → buffers only increase size. After loading/saving nothing is done with this memory

Histcom:

  • Raise an error if given history declared variables do not match with given dimensions from histwrite

getincom and stringop:

  • Enable any length character for the run.def → useful for long filepaths

flincom

  • Enable filenames longer than 80 chars to any
  • Deallocate buffers at the end of any flinget subroutine
File:
1 edited

Legend:

Unmodified
Added
Removed
  • IOIPSL/trunk/src/restcom.f90

    r4747 r4863  
    139139! A flag which markes the variables we have worked on :  touched_* 
    140140!- 
    141   CHARACTER(LEN=20),DIMENSION(max_file,max_var),SAVE :: & 
     141  INTEGER, PARAMETER :: clen = 100 
     142  CHARACTER(LEN=clen),DIMENSION(max_file,max_var),SAVE :: & 
    142143 &  varname_in,varname_out 
    143144  INTEGER,DIMENSION(max_file,max_var),SAVE :: & 
     
    10901091      'restart file is not allowed.',topp) 
    10911092  ENDIF 
     1093  IF (ALLOCATED(buff_tmp1)) DEALLOCATE(buff_tmp1) 
     1094  IF (ALLOCATED(buff_tmp2)) DEALLOCATE(buff_tmp2) 
    10921095!----------------------------- 
    10931096END SUBROUTINE restget_opp_r1d 
     
    11701173      'restart file is not allowed.',topp) 
    11711174  ENDIF 
     1175  IF (ALLOCATED(buff_tmp1)) DEALLOCATE(buff_tmp1) 
     1176  IF (ALLOCATED(buff_tmp2)) DEALLOCATE(buff_tmp2) 
    11721177!----------------------------- 
    11731178END SUBROUTINE restget_opp_r2d 
     
    12581263      'restart file is not allowed.',topp) 
    12591264  ENDIF 
     1265  IF (ALLOCATED(buff_tmp1)) DEALLOCATE(buff_tmp1) 
     1266  IF (ALLOCATED(buff_tmp2)) DEALLOCATE(buff_tmp2) 
    12601267!----------------------------- 
    12611268END SUBROUTINE restget_opp_r3d 
     
    13361343      'restart file is not allowed.',topp) 
    13371344  ENDIF 
     1345  IF (ALLOCATED(buff_tmp1)) DEALLOCATE(buff_tmp1) 
     1346  IF (ALLOCATED(buff_tmp2)) DEALLOCATE(buff_tmp2) 
    13381347!----------------------------- 
    13391348END SUBROUTINE restget_opp_r4d 
     
    14161425      'restart file is not allowed.',topp) 
    14171426  ENDIF 
     1427  IF (ALLOCATED(buff_tmp1)) DEALLOCATE(buff_tmp1) 
     1428  IF (ALLOCATED(buff_tmp2)) DEALLOCATE(buff_tmp2) 
    14181429!----------------------------- 
    14191430END SUBROUTINE restget_opp_r5d 
     
    14821493    var(ji) = buff_tmp1(jl) 
    14831494  ENDDO 
     1495  IF (ALLOCATED(buff_tmp1)) DEALLOCATE(buff_tmp1) 
     1496  IF (ALLOCATED(buff_tmp2)) DEALLOCATE(buff_tmp2) 
    14841497!------------------------- 
    14851498END SUBROUTINE restget_r1d 
     
    15521565    ENDDO 
    15531566  ENDDO 
     1567  IF (ALLOCATED(buff_tmp1)) DEALLOCATE(buff_tmp1) 
     1568  IF (ALLOCATED(buff_tmp2)) DEALLOCATE(buff_tmp2) 
    15541569!------------------------- 
    15551570END SUBROUTINE restget_r2d 
     
    16251640    ENDDO 
    16261641  ENDDO 
     1642  IF (ALLOCATED(buff_tmp1)) DEALLOCATE(buff_tmp1) 
     1643  IF (ALLOCATED(buff_tmp2)) DEALLOCATE(buff_tmp2) 
    16271644!------------------------- 
    16281645END SUBROUTINE restget_r3d 
     
    18801897 & (fid,vname_q,list_dims,itau,buff_tmp2) 
    18811898!----------------------------- 
     1899  IF (ALLOCATED(buff_tmp1)) DEALLOCATE(buff_tmp1) 
     1900  IF (ALLOCATED(buff_tmp2)) DEALLOCATE(buff_tmp2) 
    18821901END SUBROUTINE restput_opp_r1d 
    18831902!=== 
     
    19651984  CALL restput_real (fid,vname_q, list_dims,itau,buff_tmp2) 
    19661985!----------------------------- 
     1986  IF (ALLOCATED(buff_tmp1)) DEALLOCATE(buff_tmp1) 
     1987  IF (ALLOCATED(buff_tmp2)) DEALLOCATE(buff_tmp2) 
    19671988END SUBROUTINE restput_opp_r2d 
    19681989!=== 
     
    20492070 & (fid,vname_q,list_dims,itau,buff_tmp2) 
    20502071!----------------------------- 
     2072  IF (ALLOCATED(buff_tmp1)) DEALLOCATE(buff_tmp1) 
     2073  IF (ALLOCATED(buff_tmp2)) DEALLOCATE(buff_tmp2) 
    20512074END SUBROUTINE restput_opp_r3d 
    20522075!=== 
     
    21352158 & (fid,vname_q,list_dims,itau,buff_tmp2) 
    21362159!----------------------------- 
     2160  IF (ALLOCATED(buff_tmp1)) DEALLOCATE(buff_tmp1) 
     2161  IF (ALLOCATED(buff_tmp2)) DEALLOCATE(buff_tmp2) 
    21372162END SUBROUTINE restput_opp_r4d 
    21382163!=== 
     
    22232248 & (fid,vname_q,list_dims,itau,buff_tmp2) 
    22242249!----------------------------- 
     2250  IF (ALLOCATED(buff_tmp1)) DEALLOCATE(buff_tmp1) 
     2251  IF (ALLOCATED(buff_tmp2)) DEALLOCATE(buff_tmp2) 
    22252252END SUBROUTINE restput_opp_r5d 
    22262253!=== 
     
    22832310  CALL restput_real (fid,vname_q,list_dims,itau,buff_tmp1) 
    22842311!------------------------- 
     2312  IF (ALLOCATED(buff_tmp1)) DEALLOCATE(buff_tmp1) 
     2313  IF (ALLOCATED(buff_tmp2)) DEALLOCATE(buff_tmp2) 
    22852314END SUBROUTINE restput_r1d 
    22862315!=== 
     
    23452374  CALL restput_real(fid,vname_q,list_dims,itau,buff_tmp1) 
    23462375!------------------------- 
     2376  IF (ALLOCATED(buff_tmp1)) DEALLOCATE(buff_tmp1) 
     2377  IF (ALLOCATED(buff_tmp2)) DEALLOCATE(buff_tmp2) 
    23472378END SUBROUTINE restput_r2d 
    23482379!=== 
     
    24112442  CALL restput_real(fid,vname_q,list_dims,itau,buff_tmp1) 
    24122443!------------------------- 
     2444  IF (ALLOCATED(buff_tmp1)) DEALLOCATE(buff_tmp1) 
     2445  IF (ALLOCATED(buff_tmp2)) DEALLOCATE(buff_tmp2) 
    24132446END SUBROUTINE restput_r3d 
    24142447!=== 
     
    25962629  CHARACTER(LEN=3) :: str 
    25972630  LOGICAL :: l_dbg 
     2631 
     2632  CHARACTER(len=clen+10) :: str1, str2 
    25982633!--------------------------------------------------------------------- 
    25992634  CALL ipsldbg (old_status=l_dbg) 
     
    26252660  ENDIF 
    26262661  nbvar_out(fid) = nbvar_out(fid)+1 
     2662  IF (len(trim(varname)) .GT. clen) THEN 
     2663    write(str1,*) "Maximum length allowed: ", clen 
     2664    write(str1,*) "But found: ", len(trim(varname)) 
     2665    CALL ipslerr (3,'restdefv', & 
     2666      'Variable name too long for variable '//trim(varname), & 
     2667        str1, str2) 
     2668  ENDIF 
     2669 
    26272670  varname_out(fid,nbvar_out(fid)) = varname 
    26282671!- 
Note: See TracChangeset for help on using the changeset viewer.